Leetcode 39. 組合總和
阿新 • • 發佈:2018-12-24
給定一個無重複元素的陣列 candidates
和一個目標數 target
,找出 candidates
中所有可以使數字和為 target
的組合。
candidates
中的數字可以無限制重複被選取。
說明:
- 所有數字(包括
target
)都是正整數。 - 解集不能包含重複的組合。
示例 1:
輸入: candidates =[2,3,6,7],
target =7
, 所求解集為: [ [7], [2,2,3] ]
示例 2:
輸入: candidates = [2,3,5],
target = 8,
所求解集為:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
因為全是正數,所以,當dfs中的sum>target時,不必再進行dfs了,減去這種情況。
每一次往下dfs時,要在>=這個數的位置進行搜尋。
C++:
class Solution { public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { int Size=candidates.size(); vector<vector<int>>ve; vector<int> te; if(Size==0) return ve; dfs (0,target,candidates,ve,te,Size,0); return ve; } void dfs (int sum,int target,vector<int>& v1,vector<vector<int>>& re,vector<int>& te,int Size,int loc) { if(sum==target) { re.push_back(te); return; } for (int i=loc;i<Size;i++) { if(sum+v1[i]>target) continue; te.push_back(v1[i]); dfs (sum+v1[i],target,v1,re,te,Size,i); te.pop_back(); } } };