216. 组合总和 III

 1 class Solution 
 2 {
 3     vector<vector<int>> res;
 4     int sum = 0;
 5 public:
 6     void helper(vector<int>& nums, int start,int target, vector<int>& out,int k)
 7     {
 8         if(sum == target && k == out.size())
 9         {
10             res.push_back(out);
11         }
12         
13         if(sum > target) return;
14 
15         for (int i = start; i < nums.size(); ++i)
16         {
17             //去重
18             if(i != start && nums[i] == nums[i - 1]) continue;
19 
20             out.push_back(nums[i]);
21             sum += nums[i];
22             helper(nums, i + 1,target,out,k);//每个数字在每个组合中只能使用一次,所以是 i+1 
23 
24             out.pop_back();
25             sum -= nums[i];
26         }
27     }
28 
29 public:
30     vector<vector<int>> combinationSum3(int k, int target) 
31     {
32         vector<int> nums;
33         for(int i = 1;i <= 9;i ++) nums.push_back(i);
34 
35         vector<int> out;
36         sort(nums.begin(),nums.end());
37         helper(nums,0,target,out,k);
38         return res;
39     }
40 };

 

posted @ 2020-03-17 23:25  Jinxiaobo0509  阅读(114)  评论(0)    收藏  举报