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]]
题目的意思是:求用k个[1,9]的数字组成和为n的数组集合,其中每个数字不能重复,对于这种遍历有限制条件的问题可以采用回溯的方式完成。
class Solution {
public:
void combination(vector<int> &temp,vector<vector<int> > &result,int sum,int k,int n,int i)
{
if(temp.size() == k)
{
if(sum == n)
{
result.push_back(temp);
}
return;
}
for(int j=i;j<=9;j++)
{
temp.push_back(j);
combination(temp,result,sum+j,k,n,j+1);
temp.erase(temp.end()-1);//没满足条件的回溯了
}
}
vector<vector<int>> combinationSum3(int k, int n) {
//采用回溯法来完成
vector<vector<int> > result;
vector<int> temp;
if(k<=0 || n<=0 || n<k || n>9*k) return result;
if(k == 1)//只要一个数,特殊处理
{
temp.push_back(n);
result.push_back(temp);
return result;
}
combination(temp,result,0,k,n,1);
return result;
}
};