LeetCode-40-Combination Sum II(DFS)-Medium

来源:互联网 发布:罗百吉 什么世界 知乎 编辑:程序博客网 时间:2024/05/01 11:39

题意理解:

同39,但是,

1)要求同一元素不能重复使用;

2)输入元素中可能出现重复的内容,所以,剪枝过程要再39的基础上做调整;


解题代码:

class Solution {private:    vector<vector<int>> ans;    void dfs(vector<int> candi, int index, vector<int> preAns, int tar){        int size=candi.size();        if(index>size){            return;        }                int pre=-1;        for(int i=index; i<size; i++){            if(candi[i]==pre){                continue;            }                        vector<int> t(preAns);            t.push_back(candi[i]);            if(candi[i]<tar){                pre=candi[i];                dfs(candi, i+1, t, tar-candi[i]);            }else if(candi[i]>tar){                return;            }else{                ans.push_back(t);                return;            }        }    }    public:    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {        sort(candidates.begin(), candidates.end());        vector<int> pre;        dfs(candidates, 0, pre, target);                return ans;    }};


0 0
原创粉丝点击