216. Combination Sum III

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Ensure that numbers within the set are sorted in ascending order.

Example 1:

Input: k = 3, n = 7

Output:

[[1,2,4]]

Example 2:

Input: k = 3, n = 9

Output:

[[1,2,6], [1,3,5], [2,3,4]]

回溯搜索
竟然没注意 a unique set of numbers

class Solution {
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        backtrack(k, n, 1);
        return result;
    }
    
private:
    vector<vector<int>> result;
    vector<int> temp;
    
    void backtrack(int k, int n, int index){
        if(k == 0 && n == 0) {
            result.push_back(temp);
            return;
        }
        if(k == 0 && n > 0) return;
        
        for(int i = index; i <= 9; ++i){
            if(i <= n){
                temp.push_back(i);
                //包含i在内的情况都出现过了
                backtrack(k - 1, n - i, i + 1);
                temp.pop_back();
            }else
                break;
        }
    }
};

你可能感兴趣的:(216. Combination Sum III)