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.
public class Solution { public List<String> letterCombinations(String digits) { List<String> result = new ArrayList<String>(); if (digits.length()== 0 ) return result; String[] map = new String[ 10 ]; map[0 ] = "" ; map[1 ] = "" ; map[2 ] = "abc" ; map[3 ] = "def" ; map[4 ] = "ghi" ; map[5 ] = "jkl" ; map[6 ] = "mno" ; map[7 ] = "pqrs" ; map[8 ] = "tuv" ; map[9 ] = "wxyz" ; int len = 0 ; for ( int i= 0 ;i<digits.length();i++){ if (digits.charAt(i)!= '0' && digits.charAt(i)!= '1' ){ len++; } } solve(0 , map, result, 0 , digits, new char [len]); return result; } void solve( int len,String[] map,List<String> result, int cur,String digits, char [] chars){ if (chars.length==len){ String str = new String(chars); result.add(str); return ; } String cur_str = map[digits.charAt(cur)-'0' ]; if (cur_str.length()== 0 ) solve(len, map, result, cur+ 1 , digits, chars); else { for ( int i= 0 ;i<cur_str.length();i++){ chars[len] = cur_str.charAt(i); solve(len+1 , map, result, cur+ 1 , digits, chars); } } } }
原文链接http://blog.csdn.net/crazy__chen/article/details/45507041