Combination Sum III backtracking

Description

216. Combination Sum III
Find all valid combinations of k numbers that sum up to n such that the following conditions are true:

Only numbers 1 through 9 are used. Each number is used at most once. Return a list of all possible valid combinations. The list must not contain the same combination twice, and the combinations may be returned in any order.

Example 1:

Input: k = 3, n = 7
Output: [[1,2,4]]
Explanation:
1 + 2 + 4 = 7
There are no other valid combinations.
1
2
3
4
5

Example 2:

Input: k = 3, n = 9
Output: [[1,2,6],[1,3,5],[2,3,4]]
Explanation:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
There are no other valid combinations.
1
2
3
4
5
6
7

Constraints:

2 <= k <= 9
1 <= n <= 60
1
2

Solution

/*
 * @lc app=leetcode.cn id=216 lang=cpp
 *
 * [216] 组合总和 III
 */
#include <vector>
using namespace std;

// @lc code=start
class Solution
{
public:
    vector<vector<int>> res;
    vector<int> path;

    void backtracking(int startIndex, int sum, int k, int n)
    {
        if (path.size() == k)
        {
            //check if it's equal to the target int n
            if (sum == n)
            {
                //if the sum equals to int n,
                //we save it into the vector res
                res.push_back(path);
            }
            return;
        }

        //(k-path.size()) means still need how many elements to reach total amount of k
        for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++)
        {
            sum += i;
            path.push_back(i);
            backtracking(i + 1, sum, k, n);
            sum -= i;
            path.pop_back();
        }
    }

    vector<vector<int>> combinationSum3(int k, int n)
    {
        backtracking(1, 0, k, n);
        return res;
    }
};
// @lc code=end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Last Updated: 11/25/2021, 5:01:32 AM
Contributors: oddnaveed