【LeetCode 51】216.组合总和III

简介: 【LeetCode 51】216.组合总和III

一、题意

二、解答过程

这道题和 《77.组合》比起来,就是多了一些限制条件,本题是要找到和为n的k个数的组合,而整个集合已经是固定的了[1,…9]

图中可以看出,只有取集合红色的是满足条件的。

  • 回溯三部曲
class Solution {
private:
    vector<vector<int>>result;//存放结果集
    vector<int> path;//符合条件的结果
    // targetSum:目标和,也就是题目中的n。
    // k:题目中要求k个数的集合。
    // sum:已经收集的元素的总和,也就是path里元素的总和。
    // startIndex:下一层for循环搜索的起始位置。
    void backtracking(int targetSum,int k,int sum,int startIndex)
    {
        if (sum > targetSum)
        { // 剪枝操作:如果元素和大于后面的数值,后面就不用遍历了
            return; // 如果path.size() == k 但sum != targetSum 直接返回
        }
        if(path.size()==k)
        {
            if(sum==targetSum)
            {
                result.push_back(path);
            }
            return;
        }
        for(int i=startIndex;i<=9;i++)
        {
            sum+=i;//处理
            path.push_back(i);//处理
            backtracking(targetSum,k,sum,i+1);
            sum-=i;//回溯
            path.pop_back();//回溯
        }
    }
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        result.clear();//可以不加这行代码
        path.clear();//可以不加这行代码
        backtracking(n,k,0,1);
        return result;
    }
};


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