组合总和 III

原题:

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

说明:

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

示例 1:

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

示例 2:

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

解题方法:

解法一:

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(k, n, 1);
        return res;
    }

    void backtracking(int k, int n, int startIdx)
    {
        if (path.size() == k)
        {
            if (Sum(path) == n)
                res.push_back(path);
            return;
        }
        for (int i = startIdx; i < 10 - (k - path.size()) + 1; i++)
        {
            path.push_back(i);
            backtracking(k, n, i + 1);
            path.pop_back();
        }
        return;
    }

    int Sum(vector<int> path)
    {
        int sum=0;
        for (auto i : path)
        {
            sum += i;
        }
        return sum;
    }
};

做题小结:

根据之前的组合问题进行修改即可。