Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
这题肯定是DFS+剪枝,只是需要先弄出一个映射关系表出来。实现的时候,并没有如往常一样将中间结果用引用进行传递,而是直接进行传值。主要是string的复制本身并不太消耗资源,也可以减少压入+弹出这种撤回操作。
class Solution {
public:
const vector<string> keyboards{
"", //0
"", //1
"abc", //2
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz"
};
vector<string> letterCombinations(string digits) {
vector<string> ret;
DFS(digits,0,"",ret);
return ret;
}
private:
void DFS(string &digits,int start,string solve,vector<string> &ret){
int n=digits.size();
if(start==n){
ret.push_back(solve);
return;
}
if(!isMapLetter(digits[start]))return;
int key=digits[start]-'0';
for(int j=0;j<keyboards[key].size();j++){
DFS(digits,start+1,solve+keyboards[key][j],ret);
}
}
bool isMapLetter(char x){
if(!isdigit(x))return false;
if(x=='0'||x=='1') return false;
return true;
}
};