给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
思路:利用回溯法,找到第一个数字,对应的字符串,然后依次遍历,并且递归调用回溯方法。
class Solution {
private static final String[] KEYS = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
List<String> list = new ArrayList();
public List<String> letterCombinations(String digits) {
if ("".equals(digits) || digits == null) {
return list;
}
int[] index = new int[]{0};
backTracking("", digits, index);
return list;
}
public void backTracking(String combination, String digits, int[] index) {
if (index[0] == digits.length()) {
list.add(combination);
} else {
int k = Integer.valueOf(digits.substring(index[0], index[0] + 1));
String letters = KEYS[k];
index[0]++;
for (int i = 0; i < letters.length(); i++) {
String letter = letters.substring(i, i + 1);
backTracking(combination + letter, digits, index);
}
index[0]--;
}
}
}