Leetcode39组合总和

2019-10-31  本文已影响0人  answerLDA

题目

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

示例 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();
        }
    }
};
上一篇下一篇

猜你喜欢

热点阅读