找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有1 - 9的正整数,并且每种组合中不存在重复的数字。
说明:
- 所有数字都是正整数。
- 解集不能包含重复的组合。
示例 1:
输入: k = 3, n = 7 输出: [[1,2,4]]
示例 2:
输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
思路:和上一题的思路一样, 只是加了一个条件, 长度要是规定的长度
1 class Solution { 2 public: 3 void dfs(vector<vector<int>>&ans, vector<int>&subseq, int k, int n, int index){ 4 if(n==0 && subseq.size()==k){ 5 ans.push_back(subseq); 6 return; 7 } 8 for(int i=index; i<10; i++){ 9 subseq.push_back(i); 10 dfs(ans, subseq, k, n-i, i+1); 11 subseq.pop_back(); 12 } 13 } 14 vector<vector<int>> combinationSum3(int k, int n) { 15 vector<int> subseq; 16 vector<vector<int>> ans; 17 dfs(ans, subseq, k, n, 1); 18 return ans; 19 } 20 };