1. 程式人生 > 其它 >Leetcode 216 Combination Sum III

Leetcode 216 Combination Sum III

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