首页 > 其他 > 详细

39.Combination Sum

时间:2020-05-26 12:24:22      阅读:39      评论:0      收藏:0      [点我收藏+]

给定一个数组,和一个目标值,求出用数组中的元素相加之和等于目标值得组合,数组中的数可以重复利用。

Input: candidates = [2,3,5], target = 8,
A solution set is:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]


思路:
由于数组中的元素可以重复利用,所以使用递归,让程序自己去找答案。每到一个位置,就将这个位置的target - candidates[i] ,而当candidates[i] > target时,表明后面没有解了,跳出循环,因为每一次target的值都在减小,所以就算无解,也会有跳出递归的结果。而当临时解为空时,表明没有找到解集,当其非空时,表明找到一组解,将解都遍历出来,在前面加上当前的 candidates[i],直到求出所有解。

class Solution {
public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        vector<vector<int>> res;
        sort(candidates.begin(), candidates.end());
        int n = candidates.size();
        for (int i = 0; i < n; i++) {
            if (candidates[i] > target) break;
            if (candidates[i] == target) { res.push_back({ candidates[i] }); break; }
            vector<int> tmp(candidates.begin() + i, candidates.end());
            vector<vector<int>> tmp_res = combinationSum(tmp, target - candidates[i]);
            int tmp_res_len = tmp_res.size();
            for (int j = 0; j < tmp_res_len; j++) {
                tmp_res[j].insert(tmp_res[j].begin(), candidates[i]);
                res.push_back(tmp_res[j]);
            }
        }
        return res;
    }
};

 

39.Combination Sum

原文:https://www.cnblogs.com/luo-c/p/12964720.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!