216.组合总和III
C++:需注意i=index>>9
class Solution {
public:
vector<vector<int>> res;
vector<int> temp;
void backTracting(int k,int n,int sum,/*vector<bool>&used,*/int index){
if(temp.size()==k){
if(sum==n)
res.push_back(temp);
return;
}
for(int i=index;i<=9;i++){
temp.push_back(i);
sum+=i;
backTracting(k,n,sum,i+1);
sum-=i;
temp.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
if(k==0) return res;
backTracting(k,n,0,1);
return res;
}
};
17.电话号码的字母组合
C++:
class Solution {
private:
const string letterMap[10] = {
"", // 0
"", // 1
"abc", // 2
"def", // 3
"ghi", // 4
"jkl", // 5
"mno", // 6
"pqrs", // 7
"tuv", // 8
"wxyz", // 9
};
public:
vector<string> res;
string str="";
vector<string> letterCombinations(string digits) {//23
if (digits.size() == 0) {
return res;
}
backTracking(digits,0);
return res;
}
void backTracking(string digits,int index){//index 相当于digits的下标
//digits字符串
//if(index>=digits.size()-1) return;
if(str.size()==digits.size()){
res.push_back(str);
return ;
}
int digit=digits[index]-'0';//将index指向的数字转为int
for(int j=0;j<letterMap[digit].size();j++){
str.push_back(letterMap[digit][j]);
backTracking(digits,index+1);
str.pop_back();
}
}
};