1. 程式人生 > >LeetCode 第17題電話號碼的字母組合

LeetCode 第17題電話號碼的字母組合

i++ color link 17. ear else return void arr

/*
17. 電話號碼的字母組合


給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。

給出數字到字母的映射如下(與電話按鍵相同)。註意 1 不對應任何字母。

輸入:"23"
輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

說明:
盡管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。
*/




/*
思路:回溯搜索,用getString()函數 取代hashmap速度更快
*/

 1 class Solution17Fix {
 2 
 3   private List<String> res = new LinkedList<>();
4 private char[] solveArray; 5 6 public List<String> letterCombinations(String digits) { 7 8 if (digits == null || digits.length() == 0) { 9 return new LinkedList<>(); 10 } 11 12 solveArray = new char[digits.length()]; 13 search(0,digits); 14 return res;
15 } 16 17 void search(int level, String digits) { 18 if (level == digits.length()) { 19 res.add(String.valueOf(solveArray)); 20 } else { 21 String currString = getString(digits.charAt(level)); 22 for (int i = 0; i < currString.length(); i++) { 23 solveArray[level] = currString.charAt(i);
24 search(level + 1, digits); 25 } 26 } 27 } 28 29 30 String getString(char c) { 31 switch (c) { 32 case ‘2‘: 33 return "abc"; 34 case ‘3‘: 35 return "def"; 36 case ‘4‘: 37 return "ghi"; 38 case ‘5‘: 39 return "jkl"; 40 case ‘6‘: 41 return "mno"; 42 case ‘7‘: 43 return "pqrs"; 44 case ‘8‘: 45 return "tuv"; 46 case ‘9‘: 47 return "wxyz"; 48 default: 49 return ""; 50 } 51 } 52 }

LeetCode 第17題電話號碼的字母組合