力扣刷题 DAY_62 回溯

Leetcode216

链接:力扣 

题目:

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

说明:

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

示例: 

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

思路:

有了上一题Leetcode77的基础,77题所做的是在[1,n]集合中寻找k个组合的所有解。而本题,只需在[1,9]集合中找到k个的所有组合,然后判断其和是否为sum即可。

参考代码:

class Solution {
public:
    vector> result;
    vector path;
    void dfs(int k, int sum, int index, int currentSum) {
        if (path.size() == k) {
            if (currentSum == sum) {
                result.push_back(path);
                return;
            }
        }
        for (int i = index; i <= 9; i++) {
            path.push_back(i);
            dfs(k, sum, i + 1, currentSum + i);
            path.pop_back();
        }
    }
    vector> combinationSum3(int k, int n) {
        dfs(k, n, 1, 0);
        return result;
    }
};

你可能感兴趣的:(力扣刷题,leetcode,算法)