题目分析:
这一题是给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。如:
输入: n = 4, k = 2
输出:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]
解题思路:
- 这种题基本上是递归了,先选定一个数如[1],再往加后一位[1, 2],长度等于k了,把小列表加入res,然后return,小列表抛出最后一个2加入一个3形成[1, 3]依次递归。
if k - len(out) - 1 > (n - i): break
,后面的数字个数不够了就不必要再递归了,即所需求的数字比剩余的多,直接结束本次循环
测试代码:(Runtime: 132 ms, faster than 83.49 % )
class Solution:
def combine(self, n: int, k: int) -> list:
res = []
def dfs(start, out):
if len(out) == k:
res.append(list(out))
return
for i in range(start, n + 1):
if k - len(out) - 1 > (n - i): #后面的数字个数不够了就不必要再递归了
break
out.append(i)
dfs(i + 1, out)
out.pop()
dfs(1, [])
return res
print(Solution().combine(n = 4, k = 2)) #提交时请删除该行