LeetCode第39题(组合总和)

简介: LeetCode第39题要求找出一个无重复元素整数数组中所有和为给定目标数的不同组合,可以使用回溯法解决。

题目描述:

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

示例 1:

输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。
示例 2:

输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]
示例 3:

输入: candidates = [2], target = 1
输出: []

class Solution {
    vector<vector<int>> ans;
    vector<int> combine;
public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        dfs(candidates,target,0);
        return ans;
    }

    void dfs(vector<int>& candidates,int target,int idx){
        //将符合条件的组合添加至结果变量
        if(target == 0){
            ans.push_back(combine);
            return;
        }
        //数组搜索到数组末尾后返回
        if(idx == candidates.size()) return;

        //深搜下一个数字
        dfs(candidates, target,idx + 1);
        //将当前数字添加至combine,后继续从当前数字深搜
        if(target >= candidates[idx]){
            combine.push_back(candidates[idx]);
            dfs(candidates,target - candidates[idx],idx);
            combine.pop_back();
        }
    }
};

DFS示例部分图解:

相关文章
|
1天前
Leetcode第40题(组合总和2)
LeetCode第40题“组合总和II”的解题方法,使用了回溯法来找出所有可能的组合,并对重复元素进行了处理。
8 0
|
2月前
|
算法
LeetCode第39题组合总和
LeetCode第39题"组合总和"的解题思路和技巧,采用回溯法通过递归代替多层嵌套循环,有效解决组合问题。
LeetCode第39题组合总和
|
2月前
|
算法
LeetCode第40题组合总和II
LeetCode第40题"组合总和II"的解题策略,涉及排序、去重和使用标记数组避免重复组合,通过回溯法实现递归组合。
LeetCode第40题组合总和II
|
5月前
|
存储 算法
算法题解-组合总和3
算法题解-组合总和3
|
5月前
|
Java
leetcode-377:组合总和 Ⅳ
leetcode-377:组合总和 Ⅳ
34 0
|
5月前
|
Java 索引
leetcode-39:组合总和
leetcode-39:组合总和
35 0
|
5月前
|
Java
leetcode-40:组合总和 II
leetcode-40:组合总和 II
40 0
|
5月前
|
Java
leetcode-216:组合总和 III
leetcode-216:组合总和 III
35 0
|
12月前
代码随想录Day22 LeetCode T39 组合总和 T40 组合总和II T131 分割回文串
代码随想录Day22 LeetCode T39 组合总和 T40 组合总和II T131 分割回文串
31 0
|
机器学习/深度学习 算法 安全
LeetCode - #40 组合总和 II
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。