电话号码的字母组合

49 阅读1分钟
// 电话号码的字母组合  
// 输入:digits = "23"  
// 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]  
public static List<String> letterCom(String digits){  
    ArrayList<String> com = new ArrayList<>();  
    if(digits.length()==0) return com;  
    HashMap<Character, String> pm = new HashMap(){{  
    put('2', "abc");  
    put('3', "def");  
    put('4', "ghi");  
    put('5', "jkl");  
    put('6', "mno");  
    put('7', "pqrs");  
    put('8', "tuv");  
    put('9', "wxyz");  
    }};  
    back(com,pm,digits,0,new StringBuffer());  
    return com;  
}  
  
private static void back(ArrayList<String> com,  
HashMap<Character, String> pm,  
String digits, int i,  
StringBuffer stringBuffer) {  
    if(i==digits.length()){  
        com.add(stringBuffer.toString());  
    }else{  
        char c = digits.charAt(i);  
        String s = pm.get(c);  
        int length = s.length();  
        for (int j = 0; j <=length ; j++) {  
            stringBuffer.append(s.charAt(j));  
            back(com,pm,digits,i+1,stringBuffer);  
            stringBuffer.deleteCharAt(i);  
        }  
    }  
}