LeetCode(38) Count and Say

题目

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.

分析

这是一道根据规则推导题目,要求给定序列数n,求出该序列对应的字符串。

规则如上图所示。

AC代码

class Solution {
public:
    string countAndSay(int n) {
        if (n <= 0)
            return NULL;

        //n=1时,结果为"1"
        string ret = "1";
        if (n == 1)
            return ret;
        else
        {
            for (int i = 2; i <= n; i++)
                ret = Count(ret);
        }//else
        return ret;

    }

    string Count(const string &str)
    {
        int size = strlen(str.c_str());
        //保存结果
        stringstream ret;
        //保存标识字符
        char flag = str[0];
        //计算标识字符的出现次数
        int count = 0 , i = 0;
        while( i < size )
        {
            //临时循环位
            int pos = i;
            while (str[pos] == flag)
            {
                count++;
                pos++;
            }//while
            ret << count << flag;
            flag = str[pos];
            count = 0;
            //设置下一个循环位
            i = pos;
        }//for
        return ret.str();
    }
};

GitHub测试程序源码

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 11:13:01

LeetCode(38) Count and Say的相关文章

leetcode(38)

Count and Say 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 1

LeetCode(38): 报数

Easy! 题目描述: 报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作  "one 1"  ("一个一") , 即 11.11 被读作 "two 1s" ("两个一"), 即 21.21 被读作 "one 2",  "one 1" ("一个二" , 

Leetcode(59)-Count Primes

题目: Description: Count the number of prime numbers less than a non-negative number, n. 思路: 题意:求小于给定非负数n的质数个数 西元前250年,希腊数学家厄拉多塞(Eeatosthese)想到了一个非常美妙的质数筛法,减少了逐一检查每个数的的步骤,可以比较简单的从一大堆数字之中,筛选出质数来,这方法被称作厄拉多塞筛法(Sieve of Eeatosthese). 具体操作:先将 2~n 的各个数放入表中,然

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

本节主要知识点是easyui 的手风琴加树结构做菜单导航 有园友抱怨原来菜单非常难看,但是基于原有树形无限级别的设计,没有办法只能已树形展示 先来看原来的效果 改变后的效果,当然我已经做好了,最后只放出代码供大家参考,其实网上也有这方面的资料,但是不是很好用,我还是自己写了 改变后的效果 手风琴一直都是比较漂亮和受欢迎的,但是基于树多级别来说,做起来就比较麻烦,所以我这里也用了手风琴加树的模式来做 注:上面的图标都是乱添加的,并不代表意思 进入正文: 首先必须下载一些图标.可以自行百度网页小图标

Leetcode(5)最长回文子串

Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定一个字符串 s,找到 s 中 最长 的回文子串.你可以假设 s 的最大长度为 1000.' 第一种方法:未完成:利用回文子串的特点 一开始我的思路如下:回文子串的特点是首尾字母相同,所以我对每一个字母都找到位于它后面的相同字母,利用切片判断这一段是否为回文子串(str[i:j]==str[i:j][::-1]).时间复杂度很高,主要是因为str.find操作非常耗时. class Solution(object): def lo

每天努力一点之SQL(二) count sum case when then group by

1. select sum(CASE WHEN A.[STATUS]=0 THEN 1 ELSE 0 end) as a1,  sum(CASE A.[STATUS] WHEN 1 THEN 1 ELSE 0 end) as a2,  sum(CASE A.[STATUS] WHEN 2 THEN 1 ELSE 0 end) as a3, A.UserId,C.TrainId  from CoursewareLogMiddle A join LessonDetail B   on A.Lesso

笔试算法题(38):并查集(Union-Find Sets)

出题:并查集(Union-Find Sets) 分析: 一种树型数据结构,用于处理不相交集合(Disjoint Sets)的合并以及查询:一开始让所有元素独立成树,也就是只有根节点的树:然后根据需要将关联的元素(树)进行合并:合并的方式仅仅是将一棵树最原始的节点的父亲索引指向另一棵树: 优化:加入一个rank数组存储节点深度的下界(从当前节点到其最远子节点的距离),从而可以启发式的对树进行合并,从而减少树的深度,防止树的退化:使 得包含较少节点的树根指向包含较多节点的树根,具体指代为树的高度:另

HTML5移动开发之路(38)——jqMobi插件ActionSheet

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(38)--jqMobi插件ActionSheet 现在在手机客户端上Action Sheet非常常见,比如微信中的分享按钮菜单,下面我们使用jqMobi实现一个Action Sheet,如下: 首先右击上面的按钮选择审查元素(我用的是Chrome浏览器,先按F12) [html] view plain copy print? <a class="button" onclick="s

连载:面向对象葵花宝典:思想、技巧与实践(38) - 设计模式之道

很多人能够熟练背诵出所有的设计模式,能够快速画出各种设计模式的UML类图,也能够熟练的写出<设计模式>一书中各个模式的样例代码.但一到实际的项目设计和开发的时候,往往都会陷入迷茫:要么无从下手,不知道哪个地方要用设计模式:要么生搬硬套,胡乱使用设计模式,将方案和代码搞得一团乱麻. =========================================================================== [知易行难 -- 设计模式应用的问题] 形而下者谓之器,形而上者