Problem Statement

Find all valid combinations of k numbers that sum up to n such that the following conditions are true:

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.

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.

Recursion Tree for Backtracking

Code

class Solution {
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        
        vector<vector<int>> res;
        vector<int> temp; 
        func(n,k,res,temp,1);  
        return res;
    }
    
    void func(int n,int k,vector<vector<int>>& res,vector<int>&temp,int start)
    {
        if(n==0&&temp.size()==k)
            res.push_back(temp);
        
        if(n<0)
            return;
        
        for(int i=start;i<=9;i++)
        {
            temp.push_back(i);
            func(n-i,k,res,temp,i+1);
            temp.pop_back();
        }
    }
};