一、题设
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
示例 2:
输入:n = 1, k = 1 输出:[[1]]
二、基本思路
回溯法呀,回溯三部曲:
1.确定函数参数:传统的排列组合题一般直接有一个原数组出、一个空数组入,在存满k个数时可以加入结果数组中,所以有个k值。
2.收集结果的条件:当空数组有k个数后即可收集。
3.下一趟的参数怎么修改:k不用变,将当前的数加入tmp中,从当前数截断,将之后的数组作为新数组传入即可,回溯在tmp中弹出这个数就可以。
三、代码实现
class Solution(object):
def combine(self, n, k):
res = []
now = [(i+1) for i in range(n)]
def backtracing (k,tmp,src):
if len(tmp) == k:
res.append(tmp[:])
return
for i in range(len(src)):
tmp.append(src[i])
backtracing(k,tmp,src[i+1:])
tmp.pop()
backtracing(k,[],now)
return res