给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
思路:1、string 一个二维数组做数字->字母的映射;
2、stoi在由string->int过程中,参数是不能为char的;
如果要将char->int ,还是用 - ‘0’的方法
3、string 容器也有 push_back() pop_back()这些操作;
4、如果为digits为空的话,用例不通过,得单独讨论一下。
class Solution {
public:
const string letterMap[10]={
"",//0
"",//1
"abc",//2
"def",//3
"ghi",//4
"jkl",//5
"mno",//6
"pqrs",//7
"tuv",//8
"wxyz",//9
};
string single;
vector<string> result;
void backtracking(const string digits,int digitsIndex){
//终止条件
if(single.length()==digits.length())
{
//存放结果
result.push_back(single);
return;
}
//单层循环
int index=digits[digitsIndex]-'0';
for(int i=0;i<letterMap[index].size() ;i++)
{
//处理节点
single+=letterMap[index][i];
backtracking(digits,digitsIndex+1);
//string 容器居然也有push_back() pop_back()
single.pop_back();//回溯,撤销处理结果
}
}
vector<string> letterCombinations(string digits) {
result.clear();
if(digits.length()==0) return {};
backtracking(digits,0);
return result;
}
};