question:
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.
解法一:递归
思路:类似深度优先遍历,看代码自己体会。
class Solution {
List<String> list = new ArrayList();
Map<String,String> map = new HashMap();
public List<String> letterCombinations(String digits) {
if(digits==null||digits.equals("")) return list;
map.put("2","abc");
map.put("3","def");
map.put("4","ghi");
map.put("5","jkl");
map.put("6","mno");
map.put("7","pqrs");
map.put("8","tuv");
map.put("9","wxyz");
change("",digits);
return list;
}
public void change(String s,String digits){
if(digits.length()==0){
list.add(s);
}else{
String chars = map.get(digits.charAt(0)+"");
for(int i=0;i<chars.length();i++){
change(s+chars.charAt(i),digits.substring(1));
}
}
}
}
ps:自己最开始写的代码又臭又长,真是个笨逼。