LeetCode/組合數和
阿新 • • 發佈:2022-05-22
給你一個無重複元素的整數陣列candidates和一個目標整數target,找出 candidates中可以使數字和為目標數 target的所有不同組合,並以列表形式返回,你可以按任意順序 返回這些組合
candidates中的同一個數字可以無限制重複被選取,如果至少一個數字的被選數量不同則兩種組合是不同的。
回溯法
每次選取候選陣列中的一位,預設第一位,遞迴選取該位以及後一位,避免重複遞迴,排序後使得演算法更加優化
class Solution { public: vector<vector<int>> res; vector<int> temp; vector<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end());//排序為了減少遞迴 trackback(candidates,0,target);//從第一個數開始選 return res; } void trackback(vector<int>& candidates,int i,int target){ if(target==0){ res.push_back(temp);//滿足條件記錄 return; } for(;i<candidates.size();i++){ if(target>=candidates[i]){ temp.push_back(candidates[i]); trackback(candidates,i,target-candidates[i]);//遞迴下一次選取,往後選 temp.pop_back(); } else break;//不滿足直接跳出迴圈,因為後面的更不滿足 } } };