LeetCode:组合求和III之回溯法

题目

题目链接

markdown 复制代码
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

只使用数字1到9
每个数字 最多使用一次 
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

题目图解

**

**

cpp代码

cpp 复制代码
class Solution {
public:
    vector<int> nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    //回溯
    void dfs(vector<vector<int>>& ans, vector<int>& path, int k, int target, int idx)
    {
        if (path.size() == k && target != 0)
            return;

        if (target == 0 && path.size() == k)
        {
            ans.push_back(path);
            return;
        }

        for (int i = idx; i < nums.size(); ++i)
        {
            //剪枝:如果当前的值不满足条件,则后面的数字就没有必要继续了
            if (target - nums[i] < 0)
            {
                break;
            }
            path.push_back(nums[i]);
            dfs(ans, path, k, target - nums[i], i + 1);
            //回溯
            path.pop_back();
        }
    }

    vector<vector<int>> combinationSum3(int k, int n)
    {
        vector<vector<int>> ans;
        vector<int> path;
        dfs(ans, path, k, n, 0);
        return ans;
    }
};
相关推荐
数研小生9 小时前
构建命令行单词记忆工具:JSON 词库与艾宾浩斯复习算法的完美结合
算法·json
芒克芒克9 小时前
LeetCode 题解:除自身以外数组的乘积
算法·leetcode
Python 老手9 小时前
Python while 循环 极简核心讲解
java·python·算法
@Aurora.10 小时前
优选算法【专题九:哈希表】
算法·哈希算法·散列表
Bella的成长园地10 小时前
面试中关于 c++ async 的高频面试问题有哪些?
c++·面试
爱看科技10 小时前
微美全息(NASDAQ:WIMI)研究拜占庭容错联邦学习算法,数据安全与隐私保护的双重保障
算法
彷徨而立10 小时前
【C/C++】什么是 运行时库?运行时库 /MT 和 /MD 的区别?
c语言·c++
qq_4171292510 小时前
C++中的桥接模式变体
开发语言·c++·算法
YuTaoShao11 小时前
【LeetCode 每日一题】3010. 将数组分成最小总代价的子数组 I——(解法二)排序
算法·leetcode·排序算法
吴维炜12 小时前
「Python算法」计费引擎系统SKILL.md
python·算法·agent·skill.md·vb coding