Description
Given a string containing digits from 2-9 inclusive, 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. Note that 1 does not map to any letters.
Example:
Input: "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.
分析
题目的意思是:给定一串数字,然后求出所有的相应字母(如图)的字符串组合。
- 就是一个深度优先搜索的问题,要注意循环函数的参数以及递归终止条件就行了。其他的没什么难度。
C++代码
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> res;
if(digits.empty()){
return res;
}
string dict[] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
dfs(digits,0,dict,res,"");
return res;
}
void dfs(string digits,int level,string dict[],vector<string> &res,string out){
if(level==digits.size()){
res.push_back(out);
}else{
string s=dict[digits[level]-'2'];
for(int i=0;i<s.size();i++){
out.push_back(s[i]);
dfs(digits,level+1,dict,res,out);
out.pop_back();
}
}
}
};
Python代码
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
num_map={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
if(len(digits)==0):
return []
res=[]
out=[]
self.dfs(0,num_map,digits,res, out)
return out
def dfs(self,level,num_map, digits,res, out):
if(level==len(digits)):
out.append("".join(res))
return
digit=digits[level]
for s in num_map[digit]:
res.append(s)
self.dfs(level+1,num_map,digits,res,out)
res.pop(-1)
参考文献
[编程题]letter-combinations-of-a-phone-number
[LeetCode] Letter Combinations of a Phone Number 电话号码的字母组合