力扣216. 组合总和 III

题目:

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

示例:

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

解法

sum记录当前和,可以在函数调用中相加,可以节省一部回溯的步骤。

优化剪枝:在数字没到数量限制时,和已经大于目标和时。

if (sum > n) return;

代码

class Solution {
    
    
private:
    vector<int> path;
    vector<vector<int>> res;
public:
    void traversal(int k, int n, int sum, int Index) {
    
    
        if (path.size() == k) {
    
    
            if (sum == n)
                res.push_back(path);
                return;
        }
        for (int i = Index; i <= 9; i++) {
    
    
            path.push_back(i);
            traversal(k, n, sum + i, i + 1);
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
    
    
        path.clear();
        res.clear();
        traversal(k, n, 0, 1);
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/Matcha_/article/details/114109721