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;
    }
};
相关推荐
郝亚军3 分钟前
Visual Studio 2022项目中的.sln是什么?
c++·c#·visual studio
暖阳华笺5 分钟前
【高频考点】K-Means聚类算法
c++·算法·机器学习·kmeans·聚类
下午写HelloWorld9 分钟前
后量子密码算法:协同签名研究综述
算法·密码学·后量子·协同签名
小蒋学算法11 分钟前
算法-计算右侧小于当前元素的个数-分治&归并思想
java·数据结构·算法
lqqjuly13 分钟前
FlashAttention 深度解析
人工智能·深度学习·算法
满怀冰雪18 分钟前
第05篇-滑动窗口算法-一套模板解决子串与子数组问题
java·算法
叫我:松哥27 分钟前
基于LSTM与ARIMA的城市空气质量分析与预测系统
人工智能·python·rnn·算法·机器学习·flask·lstm
j7~27 分钟前
【C++】模板初阶--函数模板,类模板详解
数据结构·c++·算法·函数模板·类模板·函数模板实例化
吴梓穆31 分钟前
UE5 C++ 注册 开始重叠和结束重叠事件
开发语言·c++·ue5
CodeSheep程序羊33 分钟前
宇树科技,即将上市!
java·c语言·c++·人工智能·python·科技·硬件工程