标签:
题目
给一个数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合。
下图的手机按键图,就表示了每个数字可以代表的字母。
给定 "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); } } }
lintcode 中等题:Letter Combinations of a Phone Number 电话号码的字母组合
标签:
原文地址:http://www.cnblogs.com/theskulls/p/4940839.html