39. Combination Sum

来源:互联网 发布:win10下装mac双系统 编辑:程序博客网 时间:2024/06/05 15:44

1刷
暴力递归,一开始是想不出来的,以为是数据结构,听说dp也可以解, 昊哥提醒了才想出,其实应该挺容易 的,只是我死活觉得暴力会超时。。。。Acm的后患。。。

class Solution {public:    void getit(int target, int sum, int num, vector<int>& cand, vector<int>& now, vector<vector<int>>& ll){     if(sum == target){         ll.push_back(now);         return;     }        if(sum > target) return;     for(int i = num; i < cand.size(); ++ i){         sum += cand[i];         now.push_back(cand[i]);         getit(target, sum, i, cand, now, ll);         now.pop_back();         sum -= cand[i];     }     return;    }    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {     sort(candidates.begin(), candidates.end());     vector<vector<int>> last;     vector<int> now;     getit(target, 0, 0, candidates, now, last);     return last;    }};

2刷
是dfs,但是就是要怎样才能写好代码!!!!发现1刷的时候竟然写出来了,伤心!
3刷要看剪子!!!!

class Solution {public:    vector<vector<int>>ve;    void findit(vector<int>& cand, vector<int> & vec, int target, int begin){        if(target == 0){            ve.push_back(vec);            return ;        }        for(int i = begin; i < cand.size() && target >= cand[i]; ++ i){            vec.push_back(cand[i]);            findit(cand, vec, target - cand[i], i);            vec.pop_back();        }    }    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {        sort(candidates.begin(), candidates.end());        vector<int>vec;        findit(candidates, vec, target, 0);        return ve;    }};
0 0
原创粉丝点击