2023.7.18
该题也是经典回溯题。 与之前做的组合有两点不同:
- 之前的组合题是求同一集合的组合,而本题是求不同集合的组合。
- 本题还需要有一个将字符串数字转换为手机号9键对应字符集的过程。
下面上代码:
class Solution {
public:
string letter_map[10] = {
"",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz"
};
vector<string> ans;
string path;
void backtrating(string digits,int index)
{
//中止条件
if(index == digits.size())
{
ans.push_back(path);
return;
}
//将对应string型数字转换为int型
int digit = digits[index]-'0';
//取出该数字对应的字符集
string letters = letter_map[digit];
for(int i=0; i<letters.size(); i++)
{
path.push_back(letters[i]);
backtrating(digits,index+1);
path.pop_back();
}
}
vector<string> letterCombinations(string digits) {
if(digits.size() == 0) return {};
backtrating(digits,0);
return ans;
}
};
如果面试中的话要注意判断异常输入的情况,即可能输入为#、0、1等异常情况。