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

1、题目描述

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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值