216. Combination Sum III
Medium
56429FavoriteShare
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.
Note:
- All numbers will be positive integers.
- The solution set must not contain duplicate combinations.
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]]
解法:标准回溯法,没啥说的。
class Solution {
public:
void combinationSum(int k, int n, int now,vector<vector<int>> &ans, vector<int> &temp)
{
if (k == 0 && n == 0)
{
ans.emplace_back(temp);
}
else
{
for (int i=now + 1; i < 10; i++)
{
if (i > n)return;
else
{
temp.push_back(i);
combinationSum(k-1,n-i,i,ans,temp);
temp.pop_back();
}
}
}
}
vector<vector<int>> combinationSum3(int k, int n)
{
vector<vector<int>> ans;
if (k > 9)return ans;
vector<int> temp;
combinationSum(k,n,0,ans,temp);
/*
for (auto &x : ans)
{
for (auto &y : x)
{
cout<<y<<" ";
}cout << endl;
}*/
return ans;
}
};