17 电话号码的字母组合
StringBuilder 的 delete() append() length() toString()
关于List Array ArrayList LinkedList 这些我又忘光了,,,
基础啊,,,,
可以说是为数不多的速战速决。
class Solution {
//1. 一个标准的回溯 dfs,结构很套路,
//2. 主要思想不难,但是我发现javase里的一些API基本就饭吃了,以至于查了很长时间
// 比方说stringbuilder的一些 append() delete() length()
// append可加string 或者char
// delete 是左闭右开
//3. Stringbuilder 比 buffer 会更快一些。
//4. 总结一下,具体独立完成的但是还差很多,在做题期间我总结一下我查了什么百度
// 1. StringBuilder 有没有类似add的方法 其实是append()
// 以及有没有删除最后一个元素的方法, 其实是delete()
// 因为之前做题的path是用ArrayList实现的,那里用poll push。。。
// 而这题的路径要以字符串的形式展现,用list结构就有电不大方便了,
// (主要是不会把一个list拼接成一个字符串,,,,,)
// 2. StringBuilder 的toString()方法是不是返回字符串
// 代码很常规 就不注释了。
List<String> res = new ArrayList<>();
List<String> map = new LinkedList<>();
StringBuilder path = new StringBuilder();
public List<String> letterCombinations(String digits) {
if(digits.length()==0) return res;
char[] target = digits.toCharArray();
int n = target.length;
map.add("abc");
map.add("def");
map.add("ghi");
map.add("jkl");
map.add("mno");
map.add("pqrs");
map.add("tuv");
map.add("wxyz");
recursion(target,1,n,path);
return res;
}
void recursion(char[] target,int depth,int n,StringBuilder path){
if(depth==n+1){
res.add(path.toString());
return;
}
else{
char[] s = map.get(target[depth-1]-'2').toCharArray();
for(int i = 0;i< s.length ; i++ ){
path.append(s[i]);
recursion(target,depth+1,n,path);
path.delete(path.length()-1,path.length());
}
}
}
}
说是为数不多的速战速决。