Leetcode 216 Combination Sum III
阿新 • • 發佈:2022-05-10
https://leetcode.cn/problems/combination-sum-iii/
遞迴標準題目
先寫遞迴函式,一邊寫一邊看缺少什麼輸入。
因為數字不能重複,而且從小到大排序正好能去重,因此對當前剩下的list而言,遍歷時給到下一層遞迴的只能是右側的陣列。
比如list=[4,5,6,7,8,9],本次迴圈了4,再迴圈到5,那麼塞給下一層的可選擇範圍就是list=[6,7,8,9]。基本上就這一個地方需要注意了。
class Solution: ans=[] def recur(self,k,n,st,cur): if k==1 and n in st: # 優化提前終止 self.ans.append(cur+[n]) if k==1 and n not in st: return if n<0 or k>len(st): # 優化提前終止 return for i in range(len(st)): cur+=[st[i]] self.recur(k-1,n-st[i],st[i+1:],cur) cur.pop() def combinationSum3(self, k: int, n: int) -> list[list[int]]: self.ans=[] st=list(range(1,10)) cur=[] self.recur(k,n,st,cur) return self.ans