leetcode 39:組合總和
阿新 • • 發佈:2018-12-17
同樣是一個遞迴的題,類似與leetcode17。首先將輸入的陣列排序,這樣能夠保證先從小的數開始取,為了使得結果也是有序的,不至於重複,取一個數a要看是否大於等於已經取的數。
比如candidates=[2,3,7],target=14
如果已經取了[2,3], 再取時只能取大於等於3的數
如果沒有這個限制
[2,2,3,3,2,2]
[3,3,2,2,2,2]均為答案
void combination(std::vector<std::vector<int>> &a,std::vector<int> v,std::vector<int> candidates,int target){ if(target==0){ a.push_back(v); return; } for(int i=0;i<candidates.size();i++){ std::vector<int> v1=v; if(v.size()!=0){ int d=v1.back(); if(d>candidates[i]) continue; } int c=target; c=target-candidates[i]; if(c>=0){ v1.push_back(candidates[i]); combination(a,v1,candidates,c); }else{ return; } } } std::vector<std::vector<int>> combinationSum(std::vector<int>& candidates, int target) { std::vector<std::vector<int>> a; std::vector<int> v; std::sort(candidates.begin(),candidates.end()); combination(a,v,candidates,target); return a; }