1. 题目
2. 分析
本题有个难点在于如何保存深搜得到的结果?总结了一下,深搜处理的代码,关于返回值有三大类。
第一类:层层传递,将最深层的结果传上来;这类题有:【反转链表】
第二类:每层都返回值,迭代更新;这类题有【二叉树最大深度】
第三类:使用全局变量,将结果写到变量中保存。
本题的深搜代码则需要配合第三类来解决。
3. 代码
python
class Solution:
res = []
def combine(self, n: int, k: int) -> List[List[int]]:
cnt = 0
idx = 1
self.res = []
tmp = []
self.dfs(cnt, n, k, idx, tmp)
return self.res
def dfs(self, cnt, n, k, idx, tmp):
# 这里需要注意,是n+1, 否则最后一个结果拿不到。
# 一定要结合代码输出快速的定位问题
if idx > n+1:
return
if cnt == k:
print(tmp)
self.res.append(tmp[:])
elif cnt < k:
tmp.append(idx)
self.dfs(cnt+1, n, k, idx+1, tmp)
del tmp[-1]
self.dfs(cnt, n, k, idx+1, tmp)