(每日一练c++)CC112 外观数列

描述

外观数列的前几项如下:

1, 11, 21, 1211, 111221, ...

1读作“1个1”或11

11读作“2个1“或者21

21读作”1个2,1个1“或者1211

给出一个整数n,请给出序列的第n项

每一次读都是以前一次为基础

注意:序列中的数字用字符串表示

示例1

输入:

2

返回值:

"11"

示例2

输入:

4

返回值:

"1211"
//刚开始一直没懂题的意思,其实就是假设第一个是1,然后每一次前面生成的,n指读多少次。
//n=1,就是1
//n=2,就是读两次,结果为11
//n=3,就是读3次,结果为21
//n=4,就是读4次,结果为1211,
//每一次读都是以前一次为基础
public class Solution {
    public String countAndSay(int n) {
        int i=1;
        String result = "1";
        while(i<n){
            result = countOnce(result);
            i++;
        }
        return result;
    }
    public String countOnce(String res){
        char c = res.charAt(0);
        int num=1;
        StringBuilder sb = new StringBuilder();
        for(int i=1;i<res.length();i++){
            if(res.charAt(i)==c){
                num++;
                continue;
            }
            sb.append(String.valueOf(num)+c);
            c=res.charAt(i);
            num=1;
        }
        sb.append(String.valueOf(num)+c);
        return sb.toString();
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值