Count and Say

一、 题目

题目说,如下的字符串:

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

1读成11(一个1)

11读成21(两个1)

21读成(一个2一个1)

......

给一个整数,返回对应得语句。返回语句为一个字符串

二、 分析

题目的意思不是很明白,其实就是说第i+1个字符串是第i个字符串的读法,第一字符串为 “1

比如第四个字符串是1211,它的读法是 1112,21,因此第五个字符串是111221。第五个字符串的读法是:312211,因此第六个字符串是312211

明白了题意,我们不难想到思路:

1、初始字符串为”1”,字符ch为 str[0],中间字符串为str2;

2、从1开始循环产生字符串直到n

3、遍历字符串,计数相连的相同字符,并产生新的字符串; 

 

class Solution {
public:
    string countAndSay(int n) {
        if(n == 0)
        	return "";
        string str = "1";
        for(int i = 1; i < n; i++){
        	char ch = str[0];
        	string str2 = "";
        	int count = 1;
        	for(int j=1;j<str.size();j++){
        		if (str[j] == ch)
        			count ++;
        		else if(count > 0){
        			str2 = str2 + char(count + '0') + ch;
        			count = 1;
        			ch = str[j];
				}
			}
        	str2 = str2 + char(count + '0') + ch;
        	str = str2;
        }
        return str;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值