Question:
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"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
给定一个数字字符串,返回所有可能的这个数字所代表的字母的组合,比如如果输入string “23”,那么输出为["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"],你的答案可以以任何顺序排列。
算法思想:① 输入的是数字字符串,可以把这些数字依次字母集合,如把2看做["a","b","c"],把9看做是["w","x","y","z"],对数字字符串遍历一遍,从头进行两两组合,比如输入的字符串是“234”,数字23组合的Arraylist 1是
["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"],把4看做Arraylist 2 为["g","h","i"],再把Arraylist 1和 Arraylist 2组合。
② 该怎么实现,需要设计一个方法getDigitsArray,输入数字,可以返回Arraylist型的这个数字代表的字母组合。
③ 还需要设计一个方法getArrayList,可以对两个Arraylist中的元素进行组合,详细请见下面代码。
代码设计:
1 class Solution18 { 2 public ArrayList<String> letterCombinations(String digits) { 3 ArrayList<String> arraylist1=new ArrayList<String>(); 4 if(digits.length()==0){ 5 arraylist1.add(""); 6 return arraylist1; 7 } 8 arraylist1=getDigitsArray(digits.charAt(0)); 9 for(int i=1;i<digits.length();i++){//从前向后依次两两组合 10 ArrayList<String> arraylist2=getDigitsArray(digits.charAt(i)); 11 arraylist1=getArrayList(arraylist1, arraylist2); 12 } 13 return arraylist1; 14 } 15 public ArrayList<String> getArrayList(ArrayList<String>arraylist1 ,ArrayList<String> arraylist2){ 16 ArrayList<String> strlist=new ArrayList<String>();//这个函数的作用是返回两个Arraylist的组合 17 for(int i=0;i<arraylist1.size();i++){ 18 for(int j=0;j<arraylist2.size();j++){ 19 strlist.add(arraylist1.get(i)+arraylist2.get(j)); 20 } 21 } 22 return strlist; 23 } 24 public ArrayList<String> getDigitsArray(char ch){//这个函数的作用是返回数字对应的Arraylist形式的字母组合 25 ArrayList<String> str=new ArrayList<String>(); 26 switch(ch){ 27 case '0':break; 28 case '1':break; 29 case '2':str.add("a");str.add("b");str.add("c");break; 30 case '3':str.add("d");str.add("e");str.add("f");break; 31 case '4':str.add("g");str.add("h");str.add("i");break; 32 case '5':str.add("j");str.add("k");str.add("l");break; 33 case '6':str.add("m");str.add("n");str.add("o");break; 34 case '7':str.add("p");str.add("q");str.add("r");str.add("s");break; 35 case '8':str.add("t");str.add("u");str.add("v");break; 36 case '9':str.add("w");str.add("x");str.add("y");str.add("z");break; 37 } 38 return str; 39 } 40 }
2013-10-24 01:40:56