LeetCode 39 Combination Sum

来源:互联网 发布:淘宝里的转化率是什么 编辑:程序博客网 时间:2024/06/07 10:41

题意:

数字集合中的每个数字可以使用无限次,求出所有的数字和为给定target的方案。


思路:

如果target小的话,可以当成完全背包问题来处理,但是target数值可能很大,所以干脆就搜索吧= =

从大到小的搜索集合中的数字并枚举使用次数。


代码:

class Solution {public:    vector<vector<int>> combinationSum(vector<int> &candidates, int target) {        n = candidates.size();        count = new int[n];        vector<vector<int>> ans;        sort(candidates.begin(), candidates.end());        dfs(n - 1, target, ans, candidates);        return ans;    }private:    int n;    int *count;    void dfs(int idx, int target, vector<vector<int>> &ans, vector<int> &candidates) {        for (int i = 0; i <= target / candidates[idx]; ++i) {            count[idx] = i;            int newtar = target - candidates[idx] * i;            if (newtar == 0) {                vector<int> res;                for (int j = idx; j < n; ++j) {                    for (int k = count[j]; k > 0; --k) {                        res.push_back(candidates[j]);                    }                }                ans.push_back(res);            } else if (candidates[0] <= newtar && idx > 0) {                dfs(idx - 1, newtar, ans, candidates);            }        }    }};


原创粉丝点击