1. 題目
2. 分析
本題有個難點在于如何保存深搜得到的結果?總結了一下,深搜處理的代碼,關于返回值有三大類。
第一類:層層傳遞,將最深層的結果傳上來;這類題有:【反轉鏈表】
第二類:每層都返回值,迭代更新;這類題有【二叉樹最大深度】
第三類:使用全局變量,將結果寫到變量中保存。
本題的深搜代碼則需要配合第三類來解決。
3. 代碼
class Solution:res = []def combine(self, n: int, k: int) -> List[List[int]]:cnt = 0idx = 1self.res = []tmp = []self.dfs(cnt, n, k, idx, tmp)return self.resdef 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)