package leetcode.editor.cn;
//给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
//
// 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
//
//
//
// 示例:
//
// 输入:"23"
//输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
//
//
// 说明:
//尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
// Related Topics 字符串 回溯算法
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
//Java:电话号码的字母组合
public class P17电话号码的字母组合{
public static void main(String[] args) {
Solution solution = new P17电话号码的字母组合().new Solution();
List<String> ans = solution.letterCombinations("23");
for (int i = 0; i < ans.size(); i++) {
System.out.println(ans.get(i));
}
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public List<String> list = new ArrayList<>();
public List<String> letterCombinations(String digits) {
if (digits.length() == 0) {
return list;
}
int len = digits.length();
String[] keyBoard = new String[]{"abc","def", "ghi", "jkl", "mno",
"pqrs", "tuv", "wxyz"};
String[] map = new String[len];
for (int i = 0; i < len; i++) {
map[i] = keyBoard[digits.charAt(i) - '0' - 2];
}
robot(map, len - 1, 0, "");
return list;
}
public void robot(String[] map, int len, int idx, String strTemp) {
if (idx > len) {
list.add(strTemp);
return;
}
String temp = map[idx];
for (int i = 0; i < temp.length(); i++) {
robot(map, len, idx + 1, strTemp + temp.charAt(i));
}
}
}
//leetcode submit region end(Prohibit modification and deletion)
}