美文网首页
Leetcode39组合总和

Leetcode39组合总和

作者: answerLDA | 来源:发表于2019-10-31 12:49 被阅读0次

    题目

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
    candidates 中的数字可以无限制重复被选取。

    • 说明:
      所有数字(包括 target)都是正整数。
      解集不能包含重复的组合。

    示例 1:
    输入: candidates = [2,3,6,7], target = 7,
    所求解集为:
    [
    [7],
    [2,2,3]
    ]

    示例 2:
    输入: candidates = [2,3,5], target = 8,
    所求解集为:
    [
    [2,2,2,2],
    [2,3,3],
    [3,5]
    ]

    分析

    使用回溯算法+剪纸

    代码

    class Solution {
    public:
        
        vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
            vector<vector<int>> res;
            vector<int> path;
            sort(candidates.begin(),candidates.end());
            DFS(res,candidates,path,0,target);
            return res;
        }
        
        void DFS(vector<vector<int>> &res,vector<int> can,vector<int> path,int begin,int target){
            //如果满足条件,就把它放进结果里面
            if(target == 0 ){
                res.push_back(path);
                return;
            }
             for (int i = begin;i < can.size() && target - can[i] >= 0; i++) {
                 //试探性放进去一个,再递归回溯
                path.push_back(can[i]);
                DFS(res,can,path,i, target - can[i]);
                 //把该结果取回,尝试下一个
                path.pop_back();
            }
        }
    };
    

    相关文章

      网友评论

          本文标题:Leetcode39组合总和

          本文链接:https://www.haomeiwen.com/subject/abzzvctx.html