著名的递推查数序列 Count and Say Sequence

142 篇文章 20 订阅
45 篇文章 0 订阅

题目源自于leetcode。

题目:The count-and-say sequence is the sequence of integers beginning as follows:

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

1 is read off as "one 1" or 11.11 is read off as "two 1s" or 21.21 is read off as "one 2, then one 1" or 1211.Given an integer n, generate the nth sequence.Note: The sequence of integers will be represented as a string.

思路:没有发现什么数学规律。逐步递推吧。成为一道字符串问题了。


注意:将int数字转换为string字符串,可以用itoa(),注意其有三个参数。也可以用sprintf(),它至少也是三个参数。更要注意的是,这两个函数都需要有一个buffer空间来保存字符串返回值,需要提前申请空间,而不能只申请一个字符串指针。


代码:

class Solution {
public:
    string countAndSay(int n) {
        string last, cur;
        last = "1";
        for(int i=2;i<=n; i++)
        {
            cur = count(last);
            last = cur;
        }
        return last;
    }
    
    string count(const string &input)
    {
        int n = input.length();
        char tmp[10];
        string out = "";
        int i=0;
        int count=1;
        char c = input[i];
        i++;
        while(i<n)
        {
            if(c == input[i])
            {
                i++;
                count++;
            }
            else
            {
                sprintf(tmp,"%d",count);
                out += tmp;
                out += c;
                count = 1;
                c = input[i];
                i++;
            }
        }
        //别忘了最后的一次查数
        sprintf(tmp,"%d",count);
        out += tmp;
        out += c;
        return out;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值