216.组合总和III
题目链接:https://leetcode.cn/problems/combination-sum-iii/submissions/
代码:
class Solution {
public:
vector<int> tmp;
int sum = 0;
vector<vector<int>> result;
vector<vector<int>> combinationSum3(int k, int n) {
group(k,n,1);
return result;
}
void group(int k,int n,int startIndex)
{
int size = tmp.size();
if(size > k || sum > n)
return;
if(size == k && n == sum)
result.push_back(tmp);
for(int i = startIndex;i <= 9; ++i)
{
tmp.push_back(i);
sum += i;
group(k,n,i+1);
sum -= i;
tmp.pop_back();
}
}
};
和昨天的题目一样
17.电话号码的字母组合
题目链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/submissions/
代码:
class Solution {
public:
vector<string> result;
vector<string> letterCombinations(string digits) {
if(digits.size() == 0)
return result;
string tmp;
read(digits,tmp,0);
return result;
}
void read(string digits,string tmp,int startIndex)
{
if(tmp.size() == digits.size())
result.push_back(tmp);
if(startIndex >= digits.size())
return;
for(int i = startIndex; i < digits.size(); i++)
{
if(digits[i] == '2')
{
tmp += "a";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "b";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "c";
read(digits,tmp,i+1);
tmp.pop_back();
}if(digits[i] == '3')
{
tmp += "d";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "e";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "f";
read(digits,tmp,i+1);
tmp.pop_back();
}if(digits[i] == '4')
{
tmp += "g";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "h";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "i";
read(digits,tmp,i+1);
tmp.pop_back();
}if(digits[i] == '5')
{
tmp += "j";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "k";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "l";
read(digits,tmp,i+1);
tmp.pop_back();
}if(digits[i] == '6')
{
tmp += "m";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "n";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "o";
read(digits,tmp,i+1);
tmp.pop_back();
}if(digits[i] == '7')
{
tmp += "p";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "q";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "r";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "s";
read(digits,tmp,i+1);
tmp.pop_back();
}if(digits[i] == '8')
{
tmp += "t";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "u";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "v";
read(digits,tmp,i+1);
tmp.pop_back();
}if(digits[i] == '9')
{
tmp += "w";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "x";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "y";
read(digits,tmp,i+1);
tmp.pop_back();
tmp += "z";
read(digits,tmp,i+1);
tmp.pop_back();
}
}
}
};
暴力解法哈哈哈哈哈哈
class Solution {
public:
vector<string> result;
const string letterMap[10] = {
"", //0
"", //1
"abc", //2
"def", //3
"ghi", //4
"jkl", //5
"mno", //6
"pqrs", //7
"tuv", //8
"wxyz", //9
};
vector<string> letterCombinations(string digits) {
if(digits.size() == 0)
return result;
string tmp;
read(digits,tmp,0);
return result;
}
void read(string digits,string tmp,int startIndex)
{
if(tmp.size() == digits.size())
{
result.push_back(tmp);
return;
}
int index = digits[startIndex] - '0';
string letter = letterMap[index];
for(int i = 0 ; i < letter.size();i++)
{
tmp.push_back(letter[i]);
read(digits,tmp,startIndex+1);
tmp.pop_back();
}
}
};
这种更容易理解 然后更高效