題目連接:https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/git
題目大意:給出所給數字所對應字母的全部組合字符串。例子以下:數組
解法一:深搜,沒遇到一個數字,就dfs一次它所對應的字母,而後再回溯,基本上就是組合的排列組合的變形。細節注意:1.將每一個數字所對應的字符串存入數組。2.將字符數字轉爲數字。3.刪除字符串最後一個字符。代碼以下(耗時3ms):ide
1 private static String[] s = {"", "", "abc", "def", "ghi", "jkl", "mno", "qprs", "tuv", "wxyz"};//1.將每一個數字所對應的字符串存入數組。 2 public List<String> letterCombinations(String digits) { 3 List<String> res = new ArrayList<String>(); 4 if(digits.length() == 0) { 5 return res; 6 } 7 String listIn = ""; 8 dfs(digits, res, listIn, 0); 9 return res; 10 } 11 public static void dfs(String digits, List<String> res, String listIn, int index) { 12 if(listIn.length() == digits.length()) { 13 res.add(new String(listIn)); 14 } 15 if(index == digits.length()) { 16 return; 17 } 18 int pos = digits.charAt(index) - '0';//2.將字符數字轉爲數字。 19 int length = s[pos].length(); 20 for(int i = 0; i < length; i++) { 21 listIn += s[pos].charAt(i); 22 dfs(digits, res, listIn, index + 1); 23 listIn = listIn.substring(0, listIn.length() - 1);//3.刪除字符串最後一個字符。 24 } 25 }