leetcode-第十周

来源:互联网 发布:java与 编辑:程序博客网 时间:2024/06/06 18:09

39. Combination Sum

class Solution {private:    vector<vector<int>> ret;    vector<int> tmp;public:    void solve(vector<int>& arr, int start, int target) {        if (target == 0) {            vector<int> nn = tmp;            ret.push_back(nn);            return;        }        for (int i = start; i < arr.size(); i++) {            if (target - arr[i] >= 0) {                tmp.push_back(arr[i]);                solve(arr, i, target - arr[i]);                tmp.pop_back();            }        }    }    vector<vector<int>> combinationSum(vector<int>& arr, int target) {        solve(arr, 0, target);        return ret;    }};

40. Combination Sum II

class Solution {private:    vector<vector<int>> ret;    vector<int> tmp;public:    void solve(vector<int>& arr, int len, int start, int target) {        if (target == 0) {            vector<int> nn = tmp;            ret.push_back(nn);            return;        }        for (int i = start; i < len; i++) {            if (target - arr[i] >= 0) {                tmp.push_back(arr[i]);                solve(arr, len, i + 1, target - arr[i]);                tmp.pop_back();                while (i + 1 < len && arr[i + 1] == arr[i]) i++;            }        }    }    vector<vector<int>> combinationSum2(vector<int>& arr, int target) {        sort(arr.begin(), arr.end());        int len = arr.size();        solve(arr, len, 0, target);        return ret;    }};

216. Combination Sum III

class Solution {private:    vector<vector<int>> ret;    vector<int> tmp;    int kk, nn;    void solve(int cnt, int start, int target) {        if (cnt == kk) {            if (target != 0) return;            vector<int> nn = tmp;            ret.push_back(nn);            return;        }        for (int i = start; i <= 9; i++) {            if (target >= i) {                tmp.push_back(i);                solve(cnt + 1, i + 1, target - i);                tmp.pop_back();            }        }    }public:    vector<vector<int>> combinationSum3(int k, int n) {        kk = k, nn = n;        solve(0, 1, n);        return ret;    }};
0 0