力扣17 电话号码的字母组合


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 res = new ArrayList<>();
    List map = new LinkedList<>();
    StringBuilder path = new StringBuilder();   
    public List 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());
            }
        }
    }
}

说是为数不多的速战速决。