- 216.组合总和III
- 17.电话号码的字母组合
vector<vector<int>> all;
vector<int> one;
int sum;
void backing(int k, int n, int startindex) {//需要一个当前数字
if (one.size() == k) {
if (sum == n)
all.push_back(one);
return;
}
for (int i = startindex; i <=9-(k-one.size())+1; i++) {
one.push_back(i);
sum += i;
backing(k, n, i + 1);
one.pop_back();
sum -= i;
}
}
vector<vector<int>> combinationSum3(int k, int n) {
backing(k, n, 1);
return all;
}
17.电话号码的字母组合
vector<string> all;
const string m1[10] = {
"", // 0
"", // 1
"abc", // 2
"def", // 3
"ghi", // 4
"jkl", // 5
"mno", // 6
"pqrs", // 7
"tuv", // 8
"wxyz", // 9
};
string s1;
void backing(string digits,int index){
//终止条件:找完了:
if(s1.size()==digits.size()){
all.push_back(s1);return;
}
//循环条件
int i=digits[index]-'0';
string tt=m1[i];
for(int i=0;i<tt.size();i++){
s1.push_back(tt[i]);
backing(digits,index+1);
s1.pop_back();//这个是回溯过程,因为已经到了index+1了,获取了结果再回到上一层
}
}
vector<string> letterCombinations(string digits) {
if(digits.size()==0)return all;
backing(digits,0);
return all;
}