明显,这个是根据类似矩阵的列举。建立映射,递归下去,每递归完一次,说明找到了一次的结果。则将结果添加到对应的list里面。看代码很容易懂。
class Solution {
public List<String> letterCombinations(String digits) {
HashMap<Character,String[]> map = new HashMap<>();
map.put('2',new String[]{
"a","b","c"});
map.put('3',new String[]{
"d","e","f"});
map.put('4',new String[]{
"g","h","i"});
map.put('5',new String[]{
"j","k","l"});
map.put('6',new String[]{
"m","n","o"});
map.put('7',new String[]{
"p","q","r","s"});
map.put('8',new String[]{
"t","u","v"});
map.put('9',new String[]{
"w","x","y","z"});
return getList(digits,map,"",0,new ArrayList<String>());
}
public List<String> getList(String digits,Map map,String s1,int index,List list){
if(index>=digits.length()){
return list;
}
String []nums = (String[])map.get(digits.charAt(index));
for(int j=0;j<nums.length;j++){
if(index==0){
s1 = "";
}
String s = s1;//保存之前的值。
s1+=nums[j];
getList(digits,map,s1,index+1,list);
if(index==digits.length()-1){
list.add(s1);//添加完了一项。
}
s1 = s;//之前的s1
}
return list;
}
}
看这个提交的击败率,还是有点牛批的。毕竟是第一次做出来的嘿嘿。