leetcode 38. 外观数列(medium)(优质解法)

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

代码:

java 复制代码
class Solution {
    public String countAndSay(int n) {
        //要进行 n - 1 次描述才能得到结果
        // last 代表当前要描述的字符串
        String last="1";
        // ret 代表描述 last 字符串得到的结果
        for(int i=1;i<n;i++){
             StringBuilder ret=new StringBuilder();
            //进行描述
            int length=last.length();
            for(int left=0,right=0;left<length&&right<length;){
                while(right<length&&last.charAt(left)==last.charAt(right)){
                    right++;
                }
                //将个数拼接到 ret 字符串上
                ret.append(right-left);
                //将个数对应的字符拼接到 ret 字符串上
                ret.append(last.charAt(left));
                left=right;
            }

            //进行了一轮描述
            last=ret.toString();
        }

        return last;
    }
}

题解:

本题的解法比较简单粗暴,直接按照题目的要求进行模拟即可

先要搞明白如何描述一个数字字符串,我们可以通过双指针来进行描述,比如有字符串 11222 需要我们进行描述,描述的结果应为 2132

先让 L 和 R 指针指向下标为 0 的位置,描述的核心就是要获得连续字符的个数,首先判断 R 指针和 L 指针指向的数据是否相同,相同 R 指针就向后移

1 1 2 2 2

L

R

根据上述要求,R 指针移动到当前位置,此时 R 指针指向的数据和 L 指针指向的不同,L 指针指向的就是当前数的数据,个数为 R - L,将个数和数据拼接到字符串中,得到 21

1 1 2 2 2

L

R

L 指针指向的数据已经数好了,让 L 指针移动到 R 指针所在的位置,数下一个连续数据的个数

1 1 2 2 2

L

R

同理,当 L 和 R 指针相同 R 指针就向后移动,要注意边界,R 指针移动到字符串边界时要停止,得到数据 2 个数 R - L = 3 ,将其拼接到字符串中得到 2132

1 1 2 2 2

L

R

知道如何描述,以及一开始描述的数据为 1,便知道描述 n -1 次后得到的数据为多少

相关推荐
代码雕刻家15 分钟前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain15 分钟前
算法 | 位运算(哈希思想)
算法
Kalika0-02 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
sp_fyf_20242 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
我是哈哈hh4 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
Tisfy4 小时前
LeetCode 2187.完成旅途的最少时间:二分查找
算法·leetcode·二分查找·题解·二分
Mephisto.java4 小时前
【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
sql·算法·leetcode
robin_suli4 小时前
滑动窗口->dd爱框框
算法
丶Darling.4 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
labuladuo5204 小时前
Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
数据结构·c++·算法