https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/submissions/
这道题目涉及到了字符String的相关操作,很久没回忆了,有点生疏,不过最后还是可以自己做出来了。需要注意以下几点:
- String的长度需要变化的时候,记得使用
StringBuilder
类,而不是Linkedlist<String>
- 字符的
'1','2'
等数字转化为int的时候并不与int
的1,2
对应,需要减去'0'
来得到相对的数值,因为内部是以acsii
码的十进制数来存储的。
// //用一个字符数组来对应按每个数字出现的字母,letterMap[]
// 如2:abc
// 3: def
// 4: ghi
// //for循环横向遍历digits[]
// //traverse()纵向遍历深度
// traverse函数逻辑:
// 传入参数:(int digit, int[] letterMap)
// 终止条件:
// if(digit == digits.size)
// result.add(path)return;//深入到最后一个字符
// 处理逻辑:
// digit = digits[0];
// //每个i都是对应的一个数字
// //先转换数字为对应的字符数组
// for(int j = 0; j < letterMap[i].size(); j++){
// path.add(letterMap[i][j]);
// traverse(digit下一个, letterMap);
// path.removeLast();
// }
class Solution {
String[] letterMap = {
"",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz"
};
StringBuilder path = new StringBuilder();
List<String> result = new ArrayList<>();
public List<String> letterCombinations(String digits) {
traverse(digits, 0);
return result;
}
public void traverse(String digits, int index){
if(digits.length() == 0) return;
if(index == digits.length()){
result.add(path.toString());
return;
}
System.out.println("digits.charAt(index) : "+ digits.charAt(index));
for(int i = 0; i < letterMap[digits.charAt(index) - '0'].length(); i++){
// System.out.println("i = "+ i);
path.append(letterMap[digits.charAt(index) - '0'].charAt(i));
traverse(digits, index + 1);
path.deleteCharAt(path.length()-1);
}
}
}