今天刷了leetcode17提交后看了大家的代码写法,感觉都比较繁琐,我使用了一种比较简洁的写法,代码如下所示:
class Solution {
public static List<String> letterCombinations(String digits) {
List<String> res = new ArrayList<>();
if (digits.length()>0) {
Recursive(digits, "", res);
}
return res;
}
public static void Recursive(String digits,String string,List<String> res) {
if (string.length()==digits.length()) {
res.add(string);
return;
}
int len = digits.charAt(string.length())=='7'||digits.charAt(string.length())=='9'?4:3;
int offset = digits.charAt(string.length())>'7'?1:0;
for (int i = 0; i < len; i++) {
Recursive(digits, string+String.valueOf((char)('a'+(digits.charAt(string.length())-'2')*3+i+offset)), res);
}
}
}
通过字符和数字之间的转化关系,可以直接得到对应的字符,只不过比较麻烦一点的是7和9是4个字符,这里要注意一下,碰到7和9时循环中的len要变成4,8和9时偏移量多了1,因为7那里多了一个字符。。