题意:
给一个数字字符串。根据手机按键,给出所有可能的对应字符组合。
分析:
1 用一个map或者数组之类的索引容器将查找信息存储起来
2 递归深搜
3 每一层是字符串对应数字对应的字符,可以取出当前层遍历数组
4 所以需要一个参数index代表哪一层(哪一个字符去展开)
基本差不多可以写代码了:
public class Solution {
private String[] map = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
public List<String> letterCombinations(String digits) {
List<String> list = new ArrayList<String>();
if(digits.length()==0)
return list;
helper("", digits, 0, list);
return list;
}
private void helper(String s, String digits, int index, List<String> list) {
if (index == digits.length()) {
list.add(s);
return;
}
String layer = map[(digits.charAt(index) - '0')]; //数字字符转化为数字
for (int i = 0; i < layer.length(); i++) {
helper(s + layer.charAt(i), digits, index + 1, list);
}
}
}