LeetCode 38 Count and Say(计数与报数)

翻译

计数报数序列按如下规律开始递增:
1,11,21,1211,111221,……

1 读作“1个1”或11.
11 读作“2个1”或21.
21 读作“1个2,1个1”或1211.

给定一个整数n,生成第n个序列。

备注:数字序列应该用字符串表示。

原文

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.

代码

其实并不难的一道题,不过因为是英文一直没领悟过来,直到看了别人的解。

class Solution{
public:
    string countAndSay(int n) {
        if(n == 1)
            return "1";
        string result = "1";
        for(int i = 1; i < n; ++i) {
            result = convert(result);
        }
        return result;
    }
    string convert(string str) {
        int len = str.length();
        if(len == 1) return "1" + str;
        string result;
        int count = 1;
        for(int i = 1; i < len; ++i) {
            if(str[i-1] == str[i]) count++;
            else {
                result = result + static_cast<char>(count + '0') + str[i-1];
                count = 1;
            }
            if(i == len - 1)
                result = result + static_cast<char>(count + '0') + str[i];
        }
        return result;
    }
};

然后自己写了这个……

class Solution {
public:
    string countAndSay(int n) {
        if (n == 1) {
            return "1";
        } else {
            string output = countAndSay(n - 1), result = "";
            int index = 0;
            while (index < output.size()) {
                char current = output[index];
                int cursor = index, count = 0;
                while (output[cursor] == current && cursor < output.size()) {
                    cursor++; count++;
                }
                char number = count + '0';
                result += number;
                result += current;
                index += count;
            }
            return result;
        }
    }
};
时间: 2024-10-01 04:16:20

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 1211. Give

[LeetCode]--204. Count Primes

Description: Count the number of prime numbers less than a non-negative number, n. Credits: Special thanks to @mithmatt for adding this problem and creating all test cases. public int countPrimes(int n) { int count = 0; for (int i = 2; i < n; i++) if

&lt;font color=&quot;red&quot;&gt;[置顶]&lt;/font&gt;

Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸,本博客会持续更新,感谢您的支持,欢迎您的关注与留言.博客有多个专栏,分别是关于 Windows App开发 . UWP(通用Windows平台)开发 . SICP习题解 和 Scheme语言学习 . 算法解析 与 LeetCode等题解 . Android应用开发 ,而最近会添加的文章将主要是算法和Android,不过其它内容也会继续完善. About the Author 独立 Windows App 和

leetcode难度及面试频率

转载自:LeetCode Question Difficulty Distribution               1 Two Sum 2 5 array sort         set Two Pointers 2 Add Two Numbers 3 4 linked list Two Pointers           Math 3 Longest Substring Without Repeating Characters 3 2 string Two Pointers      

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

Excel基础

一.基础 一个Excel文档称为工作簿(workbook).一个工作簿中可以包含多个工作表(sheet) ctrl+向右箭头  查看最后一列 ctrl+向下箭头 查看最后一行 二.合并单元格 三.等高等宽 1.选择整行,整列 2.将鼠标移动到行或列中的分隔处,拖动 四.设置单元格格式 五.换行与强制换行 alt+enter(回车键) 练习: 六.图片    七.页面设置 Ctrl+P打印 Ctrl+F2打印 八.冻结首行 九.序列与自定义序列 十.条件格式   十一.公式 1.=sum(d1:d

Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例

概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Hashtable介绍第2部分 Hashtable数据结构第3部分 Hashtable源码解析(基于JDK1.6.0_45)第4部分 Hashtable遍历方式第5部分 Hashtable示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3310887.h

Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

概要 学完了Map的全部内容,我们再回头开开Map的框架图.   本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311126   第1部分 Map概括 (01) Map 是"键值对"映射的抽象接口.(02) AbstractMap 实现了Map中的绝大部

Javascript 中 console 的用法

console对象是JavaScript的原生对象,它有点像Unix系统的标准输出stdout和标准错误stderr,可以输出各种信息用来调试程序,而且还提供了很多额外的方法,供开发者调用.它的常见用途有两个. 显示网页代码运行时的错误信息. 提供了一个命令行接口,用来与网页代码互动. 浏览器实现 console对象的浏览器实现,包含在浏览器自带的开发工具之中.以Chrome浏览器的"开发者工具"(Developer Tools)为例,首先使用下面三种方法的一种打开它. 按F12或者C