问题描述如下图:
问题重述:给定一个由若干个数字组成的字符串,根据图中每个数字所代表的字母,输出该数字字符串表示的所有的字母组合。
解决方法:回溯,代码参考了LeetCode的官方题解。
代码如下:
1 class Solution { 2 String[] phone = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; 3 4 List<String> output = new ArrayList<>(); //结果集 5 6 /** 7 * 回溯 8 * @param combination 已经走过的路径 9 * @param nextDigits 下一步可供选择的路径,本题中nextDights是接下来数字字符串中的数字 10 */ 11 public void backtrack(String combination, String nextDigits){ 12 if(nextDigits.length() == 0) { //走到最后一步,没有路径可走时候,结束 13 output.add(combination); 14 }else{ 15 char digit = nextDigits.charAt(0); //取出开头的数字,得到其对应的字符串 16 String letters = phone[digit - '2']; 17 for(int i = 0; i < letters.length(); i++){ 18 char letter = phone[digit - '2'].charAt(i); //取出第i个字符,作为当前步骤的选择,并基于该路径 19 backtrack(combination + letter, nextDigits.substring(1)); //进行下一步的回溯 20 } 21 } 22 } 23 24 public List<String> letterCombinations(String digits) { 25 if (digits.length() != 0) 26 backtrack("", digits); 27 return output; 28 } 29 }