📅  最后修改于: 2023-12-03 15:33:57.009000             🧑  作者: Mango
对于一个给定的数字 N 和 K,编写一个函数以获取所有唯一的相关 K 大小组合,使其和等于 N。
函数接受两个参数:
N
- 目标和K
- 组合中的元素数函数应该返回所有可能的组合列表,其中每个组合本身是唯一的并且所有组合的总和为 N。
# 输入示例
N = 7
K = 3
# 输出示例
[[1,2,4]]
在本例中,唯一的大小为 3 的组合是 [1,2,4],这是所有可能的组合中唯一的总和为 N 的组合。
具体实现方式:
下面是代码实现,使用 Python 语言编写,并返回 markdown 格式的文本:
def combinationSum3(self, K: int, N: int) -> List[List[int]]:
res = []
def dfs(nums, cur, target):
if len(nums) > K or target < 0: # 当前组合元素数过多 或 剪枝
return
if len(nums) == K and target == 0: # 组合符合条件,加入 res 数组
res.append(nums)
return
for i in range(cur, 10): # 遍历可选数
if target - i < 0: # 剪枝,当前和已经大于目标和
break
dfs(nums + [i], i + 1, target - i)
dfs([], 1, N)
return res
本题主要是考察回溯法的应用,需要注意剪枝题的思路和方法。对于剪枝问题,如果在正确的位置进行剪枝,可以让程序在指数级问题上也有比较好的表现。