Leetcode 38 外观数列思路记录

本文详细介绍了LeetCode第38题的解决方案,该题为"外观数列",难度为简单。解题思路是通过递归模拟数列的生成过程,从第一个数开始,每个数都是前一个数的描述。文中给出了关键代码实现,包括`countString`和`nextStr`两个函数,分别用于生成数列项和根据前一项得到下一项。通过示例解释了代码逻辑,如"11"描述为"21",并处理了特殊情况,如最后一个字符的计数。
摘要由CSDN通过智能技术生成

Leetcode 38 外观数列

在这里插入图片描述

在这里插入图片描述

lc 第38题 外观数列 难度:简单

然鹅我第二遍依然没有做出来!!!

思路:

1.从第二个数开始,每一个数都是前一个数的描述,可以理解成递归,想要知道第n个数如何描述,那就一定要知道n-1个数如何描述,n-1则由n-2知道…一直到第一个数

2.所以我们可以就按照这个想法开始模拟,从第一个数开始 开始描述这个数

eg: 1 “1” 描述成 “11”

​ 2 “11” 描述成 ”21“ 这里可以看到第二项其实就是第一项的结果

接下来代码

string  countstring(int n){
    string s="1";   //这里先知道第一项就是“1”,从这里开始模拟
    for(int i=1;i<n;i++) {
		s=nextstr(s);//这里就是我们思路说的,每一项都是前一项的结果!!!我第一次就是没有想到这样写
    }
    return s;
}

string nextstr(string s){
    int n=s.size();
    int pre=s[0];//记录一下第一个字符,方便我们后面跟剩余字符比较,不一样则更新字符
    int cnt=1;//记录字符出现的数量,因为这里已经记录了第一个字符,所以起始所以肯定为1,可以自己手动模拟一下
    string res; //这是我们最后存答案的地方
    for(int i=1;i<s.size();i++){
        if(pre==s[i]){
            cnt++;
        }else{//如果不一样
            res+=to_string(cnt);//由于字符串push_back不支持添加字符串,所以这里只能用+=或者append
            res.push_back(pre);
            cnt=1;//更新次数
            pre=s[i];
        }
    }//这里我们是没有添加一个最后的字符,可以模拟一下,如果是“1233”,那么最后一个字符也是3,只会执行相等语句,此时i会等于s.size()跳出循环,并没有放进去答案中,同理可以推“1224”,只会放进去2,而此时“4”没有放进去
    res+=to_string(cnt);//加上放进去的字符数量
    res.push_back(pre);
    return res;
    
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值