leetcode-count-and-say

本文介绍了一个生成Count-and-Say数列的C++程序实现,该数列从1开始,后续每一项都是前一项的读法。文章通过具体实例解释了数列的生成规则,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

count-and-say序列是从以下开始的整数序列:
1,11,21,1211,111221,…

1被读作“one 1”或11。
11被读作“两个1”或21。
21被读作“一个2,然后一个1”或1211。
给定一个整数n,生成第n 个序列。

#include <iostream>
#include <string>
using namespace std;
void countAndSay(int n) {
   if(n<0)
       cout<<"0"<<endl;
    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 =cur+ to_string(cnt) + res[i];  //to_string转换为字符
        }
        res = cur;
    }
    cout<<res<<endl;
}

int main(){
    int n;
    cin>>n;
    countAndSay(n);


}

/*
其实我们可以发现字符串中永远只会出现1,2,3这三个字符,假设第k个字符串中出现了4,那么第k-1个字符串必定有四个相同的字符连续出现,假设这个字符为1,则第k-1个字符串为x1111y。第k-1个字符串是第k-2个字符串的读法,即第k-2个字符串可以读为“x个1,1个1,1个y” 或者“个x,1个1,1个1,y个”,这两种读法分别可以合并成“x+1个1,1个y” 和 “个x,2个1,y个”,代表的字符串分别是“(x+1)11y” 和 “x21y”,即k-1个字符串为“(x+1)11y” 或 “x21y”,不可能为“x1111y”.
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值