算法分析:
- 以二维数组判断每个字母的访问情况(也解决了重复字母出现的情况)
- 用查找深度(也是当前排列长度),判断当前的具体元素
- 按照回溯模板
代码:
class Solution {
public:
int numLen;
bool visitAlpha[10][4];
vector<string> mapping = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> res;
void dfs(string output, string& digits, int num){
if(num == numLen){
res.push_back(output);
return;
}
for(int i = 0;i < mapping[digits[num] - 2 -'0'].length();i++){
if(!visitAlpha[num][i]){
visitAlpha[num][i] = true;
output.push_back(mapping[digits[num] - 2 -'0'][i]);
dfs(output, digits, num+1);
output.pop_back();
visitAlpha[num][i] = false;
}
}
}
vector<string> letterCombinations(string digits) {
if(!digits.length()){
return res;
}
numLen = digits.length();
string output;
dfs(output, digits, 0);
return res;
}
};