【LeetCode】216. 组合总和 III 结题报告 (C++)

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

题目描述:

找出所有相加之和为 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]]

解题方案:

回溯法,记住使用dsf深度优先遍历就完事了。

代码:

class Solution {
public:
    vector<vector<int>> ans;
    void dsf(int k, int n, int m, vector<int> mem){
        if(n == 0 && k == 0)
            ans.push_back(mem);
        if(n < 0 || k < 0)
            return;
        for(int i = m; i <= 9; i ++){
            mem.push_back(i);
            dsf(k - 1, n - i, 1 + i, mem);
            mem.pop_back();
        }
    }
    
    vector<vector<int>> combinationSum3(int k, int n) {
        vector<int> mem;
        dsf(k, n, 1, mem);
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_32805671/article/details/84206446