文章目录
力扣算法学习day19-1
17-电话号码的字母组合
题目
代码实现
class Solution {
// 自己直接想到的方法。0ms
// List<String> result = new ArrayList<>();
// StringBuilder path = new StringBuilder();
// public List<String> letterCombinations(String digits) {
// // 由题知,长度至少为0.
// if(digits.length() == 0){
// return result;
// }
// HashMap<Character,char[]> map = new HashMap<>();
// map.put('2',new char[]{'a','b','c'});
// map.put('3',new char[]{'d','e','f'});
// map.put('4',new char[]{'g','h','i'});
// map.put('5',new char[]{'j','k','l'});
// map.put('6',new char[]{'m','n','o'});
// map.put('7',new char[]{'p','q','r','s'});
// map.put('8',new char[]{'t','u','v'});
// map.put('9',new char[]{'w','x','y','z'});
// char[] number = digits.toCharArray();
// recall(0,number,map);
// return result;
// }
// public void recall(int i,char[] number,HashMap<Character,char[]> map){
// if(path.length() == number.length){
// result.add(path.toString());
// return;
// }
// char[] temp = map.get(number[i]);
// for(int j = 0;j < temp.length;j++){
// path.append(temp[j]);
// recall(i+1,number,map);
// path.deleteCharAt(path.length() - 1);
// }
// }
// 其他方法:使用数组,优势,写得更快?速度一样0ms
String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
List<String> result = new ArrayList<>();
StringBuilder path = new StringBuilder();
public List<String> letterCombinations(String digits) {
if(digits.length() == 0){
return result;
}
recall(digits,0);
return result;
}
public void recall(String digits,int index){
if(path.length() == digits.length()){
result.add(path.toString());
return;
}
String str = numString[digits.charAt(index)-'0'];
for(int j = 0;j < str.length();j++){
path.append(str.charAt(j));
recall(digits,index+1);
path.deleteCharAt(path.length()-1);
}
}
}