給定乙個無重複元素的陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。
說明:乍一看,有點類似於揹包問題中的湊硬幣總額的問題。但有一點不一樣,如果看成是湊硬幣問題,這道題不是求最少多少枚硬幣可以湊出某金額,而是求湊出某金額的所有可能情況。類似於全排列問題,從前往後遍歷每乙個數,每個數可以取多次,直到已經取過的數總和大於等於target時不再取,繼續嘗試下乙個數。這裡要注意,遞迴裡面額迴圈要從接收的形參start開始,這樣才能保證每次選擇的都是當前數字及之後的數字而不會是前面的數字,如果從0開始迴圈會出現[2,2,3],[2,3,2],[3,2,2]這樣的重複值。所有數字(包括 target)都是正整數。
解集不能包含重複的組合。
class
solution
//每次選擇從sum中減去當前選擇的值,sum代表當前剩餘可選擇的數值最大為多少。
void
backtrack
(vector<
int>
& candidates,
int start,
int sum)
if(sum >0)
}}};
LeetCode 39 組合總和
給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 示例 1 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 示例 2 ...
leetcode39 組合總和
參考 class solution if next num.size target num next 0 邊界條件 return 對於每個元素,有兩種處理方式,選當前元素或者不選當前元素 psol.push back num next 選當前元素 search num,next,psol,targe...
LeetCode39組合總和
給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candid...