class Solution {
public:
vector<int> dig;
vector<string> ans;
string s;
string lettermaps[10]{
"",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz",
};
vector<string> letterCombinations(string digits) {
if(digits.size() == 0){
return ans;
}
backtracking(digits, 0);
return ans;;
}
void backtracking(string digits, int index){
if(index == digits.size()){
ans.push_back(s);
return;
}
int digit = digits[index]-'0';
string letters = lettermaps[digit];
for(int i = 0; i < letters.size(); i++){
s.push_back(letters[i]);
backtracking(digits, index+1);
s.pop_back();
}
}
};
class Solution {
public:
vector<int> path;
vector<vector<int>> ans;
vector<vector<int>> combinationSum3(int k, int n) {
backtracking(n, k, 1);
return ans;
}
void backtracking(int n, int k, int startindex){
if(s(path) > n) return;
if(path.size() == k && s(path)==n){
ans.push_back(path);
return;
}
for(int i = startindex; i <= 9; i++){
path.push_back(i);
backtracking(n, k, i+1);
path.pop_back();
}
}
int s(vector<int>& path){
int sum = 0;
for(int i = 0; i < path.size(); i++){
sum+=path[i];
}
return sum;
}
};