1 题目理解
此道题目基于我们前几年用的,或许还有这几年用的九宫格输入法。九宫格上的每个数字对应着不同的字母,现在说,如果给定你一个数字,问你可以对应到多少种的字母组合?
这道题的解题方式,就是直接递归搜索就好,尝试每种可能。
这道题我觉得考点在于自己程序的书写,如何有效率的保存和组合这些可能的字符。
2 原题
Letter Combinations of a Phone Number
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”].
3 AC解
public class Solution {
//我用来加快检索速度的方式,形成字典
final static char[][] map = new char[][]{{},{},{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'},{'m','n','o'},{'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}};
List<String> result;
char[] chars;
public void dfs(String tmp,int index){
if(index==chars.length){
result.add(tmp);
return ;
}
else{
for(int j=0;j<map[chars[index]].length;j++){
dfs(tmp+map[chars[index]][j],index+1);
}
}
}
public List<String> letterCombinations(String digits) {
result=new ArrayList<String>();
chars=digits.toCharArray();
if(chars.length==0)
return result;
for(int j=0;j<chars.length;j++){
chars[j]-='0';
}
dfs("",0);
return result;
}
}