给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
加粗样式
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
思路与代码
回溯
class Solution {
Map<Character, String> map = new HashMap();
List<String> res = new ArrayList();
StringBuilder sb = new StringBuilder();
public List<String> letterCombinations(String digits) {
if (digits.length() == 0) return res;
map.put('2', "abc");
map.put('3', "def");
map.put('4', "ghi");
map.put('5', "jkl");
map.put('6', "mno");
map.put('7', "pqrs");
map.put('8', "tuv");
map.put('9', "wxyz");
backtrack(digits, 0);
return res;
}
public void backtrack(String digits, int index){
if (index == digits.length()){
res.add(new String(sb));
return;
}
String str = map.get(digits.charAt(index));
for (int i = 0;i < str.length();i++){
sb.append(str.charAt(i));
backtrack(digits, index+1);
sb.deleteCharAt(sb.length()-1);
}
}
}