File tree Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Expand file tree Collapse file tree 1 file changed +32
-0
lines changed Original file line number Diff line number Diff line change 1+ using  choice = vector<int >;
2+ vector<int > arr = {};
3+ 
4+ //  returning all possible choices to make target sum by using suffix of array [curIndex, ...]
5+ vector<choice> getAllChoices (int  curIndex, int  target) {
6+     //  base case
7+     if (target < 0 ) return  {}; //  no valid choice
8+     if (target == 0 ) return  {{}}; //  one choice, and you chose nothing
9+     if (curIndex == arr.size ()) return  {};
10+     
11+     int  curNumber = arr[curIndex];
12+     
13+     vector<choice> ans = getAllChoices (curIndex+1 , target); //  curNumber is not used at all
14+     
15+     vector<choice> other = getAllChoices (curIndex, target - curNumber); //  using it once
16+     for (choice c: other) {
17+         c.push_back (curNumber);
18+         //  now c is a valid choice 
19+         ans.push_back (c);
20+     }
21+     
22+     return  ans;
23+ }
24+ 
25+ class  Solution  {
26+     
27+ public: 
28+     vector<choice> combinationSum (vector<int >& candidates, int  target) {
29+         arr = candidates;
30+         return  getAllChoices (0 , target);
31+     }
32+ };
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments