可以使用递归的方式来解决这个问题。具体步骤是:
初始化一个空列表res,用来存储所有的组合结果。
编写递归函数helper,它接收三个参数:当前处理到的位置start,还需要从nums中选择几个数字来组合的个数count,以及一个当前已经生成的组合cur。
在helper函数中,首先判断如果count为0,表示已经选够了数字,将cur添加到res中,然后直接返回。
然后对于当前处理到的位置start,有两种选择:选这个数字,或者不选这个数字。如果选了这个数字,那么将其加入到cur中,然后从下一个位置继续递归,此时count要减1。如果不选这个数字,那么直接从下一个位置继续递归,但是count不变。
在helper函数返回后,将res返回即可。
代码示例:
def find_combinations(nums, count):
res = []
def helper(start, count, cur):
if count == 0:
res.append(cur)
return
if start == len(nums):
return
helper(start + 1, count, cur)
helper(start + 1, count - 1, cur + [nums[start]])
helper(0, count, [])
return res
这个函数的参数是一个列表nums和一个需要选多少个数字的整数count。它将返回一个列表,其中存储着所有符合条件的组合。我们可以这样使用它:
nums = [1, 2, 3, 4]
count = 3
combos = find_combinations(nums, count)
print(combos)
输出结果为:
[[1, 2, 3], [1, 2, 4], [1, 3, 4], [2,
下一篇:不改变数组而更新它