首页 > 技术文章 > lintcode 中等题:Letter Combinations of a Phone Number 电话号码的字母组合

bbbblog 2015-11-06 19:38 原文

题目

给一个数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合。

下图的手机按键图,就表示了每个数字可以代表的字母。

Cellphone

样例

给定 "23"

返回 ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]

注意

以上的答案是按照词典编撰顺序进行输出的,不过,在做本题时,你也可以任意选择你喜欢的输出顺序。

解题

无法理解答案

回溯法,表示无法理解

public class Solution {
    /**
     * @param digits A digital string
     * @return all posible letter combinations
     */
    public ArrayList<String> letterCombinations(String digits) {
        // Write your code here
        HashMap<Integer,String> map = new HashMap<Integer,String>();
        map.put(0,"");
        map.put(1,"");
        map.put(2,"abc");
        map.put(3,"def");
        map.put(4,"ghi");
        map.put(5,"jkl");
        map.put(6,"mno");
        map.put(7,"pqrs");
        map.put(8,"tuv");
        map.put(9,"wxyz");
        ArrayList<String> result = new ArrayList<String>();
        if(digits == null || digits.length() ==0 )
            return result;
        ArrayList<Character> tmp = new ArrayList<Character>();
        numtoString(digits,tmp,result,map);
        return result;
        
    }
    public void numtoString(String digits,ArrayList<Character> tmp,ArrayList<String> result,HashMap<Integer,String> map){
        if( digits.length() ==0){
            char[] arr = new char[tmp.size()];
            for(int i=0 ;i< tmp.size(); i++){
                arr[i] = tmp.get(i);
            }
            result.add(String.valueOf(arr));
            return;
        }
        Integer curr = Integer.valueOf(digits.substring(0,1));
        String letters = map.get(curr);
        for(int i = 0;i< letters.length() ;i++){
            tmp.add(letters.charAt(i));
            numtoString(digits.substring(1),tmp,result,map);
            tmp.remove(tmp.size() -1);
        }
    }
}
View Code

 

 

推荐阅读