class Solution {//回溯思想,一直Try,到头了再返回 public List<String> letterCombinations(String digits) { StringBuilder sb = new StringBuilder(); List<String> res = new ArrayList<String>(); if(digits.length()==0||digits==null) return res; Map<Character,String> map= new HashMap<Character,String>(); 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"); backtrack(digits,sb,map,res,0);//下标从零开始,对应‘2’的字符串 return res; } public static void backtrack(String digits,StringBuilder sb,Map<Character,String> map,List<String> res,int number){ if(sb.length()==digits.length()) { res.add(sb.toString()); return; } String ss=map.get(digits.charAt(number)); for(int i=0;i<ss.length();i++) { sb.append(ss.charAt(i)); backtrack(digits,sb,map,res,number+1); sb.deleteCharAt(sb.length() - 1);//这一步很容易写错,走完‘9’的W后,删除W,然后继续下一个X,依次类推层层返回。 } }//提交后一次AC }
文章来源: 17. 电话号码的字母组合