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;
    }
};
相关推荐
2501_9412366211 小时前
分布式日志系统实现
开发语言·c++·算法
2501_9412355111 小时前
C++与机器学习框架
开发语言·c++·算法
CoovallyAIHub11 小时前
基于SimCLR的自监督 YOLO:YOLOv5/8也能在低标注场景目标检测性能飙升
深度学习·算法·计算机视觉
2501_9411118611 小时前
C++模块化设计原则
开发语言·c++·算法
2501_9412375311 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
_OP_CHEN11 小时前
算法基础篇:(十)贪心算法拓展之哈夫曼编码:从 “合并最优” 到数据压缩的传奇
c++·算法·贪心算法·蓝桥杯·哈夫曼编码·算法竞赛·acm/icpc
枫叶丹411 小时前
【Qt开发】Qt窗口(二) -> QToolBar工具栏
开发语言·数据库·c++·qt
l1t11 小时前
利用DuckDB列表一句SQL输出乘法口诀表
数据库·sql·算法·duckdb
一只会写代码的猫12 小时前
深度解析 Java、C# 和 C++ 的内存管理机制:自动 vs 手动
java·jvm·算法
高山有多高12 小时前
堆应用一键通关: 堆排序 +TOPk问题的实战解析
c语言·数据结构·c++·算法