Leetcode 216. 组合总和 III

地址 https://leetcode-cn.com/problems/combination-sum-iii/

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

 


说明:

所有数字都是正整数。
解集不能包含重复的组合。 
示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

解法 DFS 逐个尝试 本代码没加优化 性能一般

class Solution {
public:
    
    vector<vector<int>> ret;
void Dfs(int selectNum, int k, int n, vector<int>& v)
{
    if (selectNum > 10) return;
    if (v.size() == k) {
        int sum = 0;
        for (auto e : v) { sum += e; }
        if (sum == n) { 
            ret.push_back(v);
        }
        return;
    }

    
        v.push_back(selectNum);
        Dfs(selectNum + 1, k, n, v);
        v.pop_back();

        Dfs(selectNum + 1, k, n, v);
    
}

vector<vector<int>> combinationSum3(int k, int n) {
    vector<int> v;
    Dfs(1, k, n, v);

    return ret;
}

};
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
阿里打赏 微信打赏
原文地址:https://www.cnblogs.com/itdef/p/11924130.html