跳至主要內容

leetcode216.组合总和Ⅲ

张威大约 1 分钟数据结构与算法回溯算法

leetcode216.组合总和Ⅲ

找出所有相加之和为 nk 个数的组合,且满足下列条件:

  • 只使用数字1到9
  • 每个数字 最多使用一次

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。
示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
解释:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
没有其他符合的组合了。
class Solution {
public:
    vector<int> path;
    vector<vector<int>> result;

    void backtracking(int k, int n, int startindex, int sum) {
        if(path.size() == k) {
            if(sum == n) {
                result.push_back(path);
            }
        }

        for(int i = startindex; i <= 9; ++i) {
            sum += i;
            path.push_back(i);
            backtracking(k, n, i + 1, sum);
            path.pop_back();
            sum -= i;
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        path.clear();
        result.clear();
        backtracking(k, n, 1, 0);
        return result;
    }
};