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 };
Mamba never out

浙公网安备 33010602011771号