1. 问题描写叙述
找出全部k个数字的组合,使它们的和为n。
设全部的数都为1~9,且没有反复数。结果要保持升序。
2. 方法与思路
採用回溯法能够非常好地解决问题。
class Solution {
public:
int target,kk;
vector<vector<int> > v;
public:
void traceback(int start, int cnt, int sum, vector<int> nums)
{
if(cnt > kk || sum > target)
{
return;
}
else if(cnt == kk && sum == target)
{
v.push_back(nums); //符合条件,插入结果集
return;
}
for(int i = start+1; i < 10; i++)
{
nums.push_back(i);
traceback(i,cnt+1,sum+i,nums);
nums.pop_back(); //还原初始状态
}
}
vector<vector<int> > combinationSum3(int k, int n) {
target = n;
kk = k;
vector<int> nums;
traceback(0,0,0,nums);
return v;
}
};