leetcode 38

今天的题总体来说还是可以的,也不是谈的算难,是一道中等题,思路是有的,遍历生成就行,看来双指针还是没学好,就是没能实现出来(很气

附上官方代码~哭了

class Solution {
    public String countAndSay(int n) {
        String str = "1";

        for(int i = 2; i <= n; i++){
            StringBuilder sb = new StringBuilder();
            //开始遍历的初始位置
            int start = 0;
            //指针移动
            int pos = 0;
            while(pos < str.length()){
                while (pos < str.length() && str.charAt(pos) == str.charAt(start)) {
                    pos++;
                }
                sb.append(Integer.toString(pos-start)).append(str.charAt(start));
                start = pos;
            }
                str = sb.toString();
            }
        return str;
    }
}

大致讲下思路吧:既然题目说是根据上一层来写的,那我们可以根据递归,也可以迭代,这里我的想法就是迭代(绝对不是我不会递归。

首先如果是n=1,就直接返回1即可

然后n=2的话,开始遍历循环,首先要pos开始遍历,如果当前字符跟起始字符相同,就相加,直至不相等就推出当前循环,然后sb就添加个数和数字,然后附给str,然后遍历,可能说的有点抽象,但这是双指针的常见操作,不懂的话可以试着自己一步步调试,就会恍然大悟。

posted @ 2021-10-16 11:33  linkora  阅读(49)  评论(0)    收藏  举报