欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode【字符串】-----38. Count and Say(报数)

程序员文章站 2022-07-15 13:06:26
...

1、题目描述

leetcode【字符串】-----38. Count and Say(报数)

2、分析

        如题,输入1,则输出1。输入2,则表示上一个数1,出现1次,则输出11。输入3,上一个数是11,则表示为1出现两次,则输出21,同理输入4,上一个数是21,则输出1211。

        也就是根据输入的数字n,求此时对应的输出,那么就要求到前面所有的输出。首先如果输入n小于1,直接输出空字符串。然后定义初始字符串为1,以--n为循环,设置一个中间变量字符串用来记录,每一次循环之后的结果,设置计数器用来计同一个连续字符出现的次数。to_string(cnt)将cnt(数字)转换为字符。并且新的字符串最后一个字符肯定是1。

3、代码

class Solution {
public:
    string countAndSay(int n) {
        if(n<1) return "";
        string res="1";
        while(--n){
            string cur="";
            for(int i=0;i<res.size();++i){
                int cnt=1;
                //判断是不是有连续相同字符
                while(i+1<res.size()&&res[i]==res[i+1]){
                    ++cnt;
                    ++i;
                }
                cur+=to_string(cnt)+res[i];
            }
            //更新结果
            res=cur;
        }
        return res;
    }
};

4、相关知识点

        to_string(1),将数字1转换成字符1。