這道題其實是組合二的變種,限制一下填入的元素是1-9即可,簡單的回溯,如果不想重複,每次都往後面更大的數取值。
class Solution {
private:
vector<vector<int>>ans;
public:
vector<vector<int>> combinationSum3(int k, int n) {
dfs(vector<int>(0),0,0,k,n);
return ans;
}
void dfs(vector<int>v,int start,int tmp,int k,int n)
{
if(start == k)
{
if(tmp == n)
{
ans.push_back(v);
}
}
else
{
int i = v.empty() ? 1 : v[v.size()-1]+1;
for(;i<10;i++)
{
if(tmp + i <= n)
{
v.push_back(i);
dfs(v,start+1,tmp+i,k,n);
v.pop_back();
}
}
}
}
};