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”].
思路:深度优先搜索(DFS).另写一个递归函数dfs(),遍历当前数字对应字符串的每个字符,然后查看下一个数字,当路径之中添加的字符个数达到输入数字的字符个数时返回,接着回溯找新的答案。
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string>keyboard{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string>result;
string path;
if(digits.empty()) return result;
dfs(digits,0,path,result,keyboard);
return result;
}
void dfs(string digits,int cur,string path,vector<string>&result,vector<string>keyboard){
if(path.size()==digits.size()){
result.push_back(path);
return;
}
for(auto c:keyboard[digits[cur]-'0']){
dfs(digits,cur+1,path+c,result,keyboard);
}
}
};