216.组合总和|||
经典的回溯套路
class Solution {
public:
void tracking(int low,int high,int n,int k,vector<vector<int>>& res,vector<int> temp,int cur){
if(k==0&&n==cur) {
res.push_back(temp);
return ;
}
if(k==0) return ;
for(int i=low;i<=high-k+1;i++) {
temp.push_back(i);
cur+=i;
tracking(i+1,high,n,k-1,res,temp,cur);
cur-=i;
temp.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
vector<vector<int>> res;
vector<int> temp;
tracking(1,9,n,k,res,temp,0);
return res;
}
};
17.电话号码的字母组合
学习一下C++中的string用法:
C++追加字符:
+= 运算符:追加单个参数值。
append 函数:允许追加多个参数值。
push_back 函数:只能追加单个字符。
C++删除字符:
erase:删除指定字符
remove:一般与erase搭配使用
pop_back:删除末尾字符
class Solution {
public:
const string table[10] = {
"", // 0
"", // 1
"abc", // 2
"def", // 3
"ghi", // 4
"jkl", // 5
"mno", // 6
"pqrs", // 7
"tuv", // 8
"wxyz", // 9
};
vector<string> result;
string s;
void tracking(string digits,int k){
if(k>=digits.size()) {
result.push_back(s);
return ;
}
int num=digits[k]-'0';
int size=table[num].size();
string letters=table[num];
for(int i=0;i<size;i++) {
s.push_back(table[num][i]);
tracking(digits,k+1);
s.pop_back();
}
}
vector<string> letterCombinations(string digits) {
result.clear();
s.clear();
if(digits.size()==0) return result;
tracking(digits,0);
return result;
}
};