示例:
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
一种效率高的回溯算法
import java.util.ArrayList;
import java.util.List;
public class PhoneNumber {
//定义字典
final static char[][] ALPHA = {
{'a', 'b', 'c'}, {'d', 'e', 'f'}, {'g', 'h', 'i'},
{'j', 'k', 'l'}, {'m', 'n', 'o'}, {'p', 'q', 'r', 's'},
{'t', 'u', 'v'}, {'w', 'x', 'y', 'z'}
};
private static List<String> list;
private static StringBuilder builder;
private static String t;
private static void add(int i) {
if (i < t.length()) {
int j = t.charAt(i) - 50;//字符在字典中的所在行
System.out.println(j);
for (char c : ALPHA[j]) {
builder.append(c);
add(i + 1);
builder.deleteCharAt(builder.length() - 1); //将已添加进入的字符删除}
} else list.add(builder.toString());
}
public static List<String> letterCombinations(String digits) {
list = new ArrayList<>();
builder = new StringBuilder();
t = digits;
if (!digits.isEmpty())
add(0);
return list;
}
}