Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Example 1:
Input: k = 3, n = 7
Output:
[[1,2,4]]
Example 2:
Input: k = 3, n = 9
Output:
[[1,2,6], [1,3,5], [2,3,4]]
求出1~9所有和为N的K个数,不能重复,不需要连续。
建立一个函数,1~9中一个个推进,分别递归调用自己,如果vec已满足K个数,和为N则push_back到res,否则跳出递归,进行for的下一个递归。
小Tips,可以根据目前vec最后的一个数来判断已递归到1~9中的第几个,然后直接对其+1就是需要在这个递归中for的起始点。
代码
class Solution {
public:
void combinationSum(int k, int n, vector<int>& vec, vector<vector<int>>& res)
{
if (n == 0)
{
if (k == 0)
res.push_back(vec);
return;
}
int small;
if (vec.empty())
small = 0;
else
small = vec.back();
for (int index = small+1; index <= k / n && index<=9; ++index)
{
vec.push_back(index);
combinationSum(k - index, n - 1, vec, res);
vec.pop_back();
}
}
vector<vector<int>> combinationSum3(int n, int k)
{
vector<int> vec;
vector<vector<int>> res;
combinationSum(k, n, vec, res);
return res;
}
};