leetcode:Letter Combinations of a Phone Number(*的字母组合)

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




原文地址:https://www.cnblogs.com/zhaolizhen/p/phoneNumCom.html