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;
    }
};
相关推荐
Lauren_Blueblue几秒前
第十六届蓝桥杯省赛Python研究生组-C变换数组
python·算法·蓝桥杯·编程基础
梓䈑1 分钟前
Gflags解剖课:从DEFINE宏到命令行解析的工程化实践
c++·gflags
Tanecious.12 分钟前
蓝桥杯备赛:Day8-小红杀怪
c++·蓝桥杯
wregjru27 分钟前
【高并发服务器项目】2.服务器业务层设计详解
c++
生信研究猿36 分钟前
leetcode 101.对称二叉树(不会做)
算法·leetcode·职场和发展
重生之我是Java开发战士37 分钟前
【笔试强训】Week1:点击消除,数组中两个字符串的最小距离,dd爱框框,腐烂的苹果,大数乘法
java·开发语言·算法
枫叶林FYL37 分钟前
【自然语言处理 NLP】前沿架构与多模态 选择性状态空间模型与并行扫描算法:从原理到实现
算法·自然语言处理·架构
WolfGang0073211 小时前
代码随想录算法训练营 Day29 | 动态规划 part02
算法·动态规划
样例过了就是过了1 小时前
LeetCode热题100 跳跃游戏 II
c++·算法·leetcode·贪心算法·动态规划
rit84324991 小时前
基于NSGA-II的多目标优化算法(MATLAB实现)
开发语言·算法·matlab