题目:
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"].解答:
深度遍历问题。在每个遍历节点上处理逻辑:
1、数字对应的按键上是否有未处理的字符,有则加上(1次加上1个),然后继续深度遍历;
2、若本节点上的字符处理完成,返回;
遍历到底部的处理:
存储得到的字符串;
代码:
import java.util.*;
public class Solution {
String[] dict;
public void initDict(){
dict = new String[10];
dict[0] = "0";
dict[1] = "1";
dict[2] = "2abc";
dict[3] = "3def";
dict[4] = "4ghi";
dict[5] = "5jkl";
dict[6] = "6mno";
dict[7] = "7pqrs";
dict[8] = "8tuv";
dict[9] = "9wxyz";
}
public void dfs(int index,int length,String src,String tmp,List<String> ret){
if(index == length){
ret.add(tmp);
} else {
for(int i=1;i<dict[src.charAt(index)-'0'].length();i++){
dfs(index+1,length,src,tmp+dict[src.charAt(index)-'0'].charAt(i),ret);
}
}
}
public List<String> letterCombinations(String digits) {
initDict();
List<String> ret = new ArrayList<String>();
if (digits.length() > 0)
dfs(0,digits.length(),digits,new String(),ret);
return ret;
}
}