leetcode日记(29)组合总和

leetcode日记(29)组合总和_第1张图片

感觉跟那个找零钱的题目差不多,用贪心算法(我好像没用

我是使用递归依次遍历candidates里的数,若target更大就递归target减遍历到的数字

(后来发现会重复,被我判断前先和结果数组里的数比大小解决了)

class Solution {
public:
    vector> combinationSum(vector& candidates, int target) {
        vector> v;
        vector vec;
        sort(candidates.begin(),candidates.end());
        hs(candidates,target,v,vec);
        return v;
    }
    void hs(vector candidates,int target,vector>& v,vector vec){
        int n=candidates.size();
        if(target==0){
            v.push_back(vec);
            vec.clear();
            return;
        }
        else{
            for(int i=candidates.size()-1;i>=0;i--){
                if(candidates[i]<=target){
                    if(vec.size()>0&&candidates[i]>vec[vec.size()-1]) continue;
                    vec.push_back(candidates[i]);
                    hs(candidates,target-candidates[i],v,vec);
                    vec.pop_back();
                }
            }
        }
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)