letter-combinations-of-a-phone-number
题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
代码
package pid17;
import java.util.*;
public class Solution {
Map<String,String> phone = new HashMap<String,String>(){
{
put("2","abc");
put("3","def");
put("4","ghi");
put("5","jkl");
put("6","mno");
put("7","pqrs");
put("8","tuv");
put("9","wxyz");
}
};
List<String> output = new ArrayList<String>();
public void backtrack(String combination,String next_digits){
// 关键是确定backtrack的参数,确定参数后会好写很多
if(next_digits.length() == 0){
output.add(combination);
}else{
String digit = next_digits.substring(0,1);
String letters = phone.get(digit);
for(int i=0;i<letters.length();i++){
backtrack(combination+letters.charAt(i),next_digits.substring(1));
}
}
}
public List<String> letterCombinations(String digits){
if(digits.length() != 0){
backtrack("",digits);
}
return output;
}
public static void main(String[] args) {
Solution sol = new Solution();
String digits = "479";
List<String> res = sol.letterCombinations(digits);
System.out.println(res);
}
}