博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
letecode [38] - Count and Say
阅读量:5324 次
发布时间:2019-06-14

本文共 1831 字,大约阅读时间需要 6 分钟。

The count-and-say sequence is the sequence of integers with the first five terms as following:

1.     12.     113.     214.     12115.     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 where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence.

Note: Each term of the sequence of integers will be represented as a string.

 

Example 1:

Input: 1Output: "1"

Example 2:

Input: 4Output: "1211"

题目大意:

  根据题目规则,后一个数根据前一个数获得。如第1个数,读为1个1,则第2个数为11;第2个数读为2个1,则第3个数为21;第三个数读为1个2、1个1,则第四个数为1211.

  依次类推,输出第n个数的表示(字符串形式)。

理解:

  方法一:直观解法。从1开始求到第n个数。

      遍历第i个数的字符串,判断每个字符的连续出现次数,转换为第i+1个字符串的组成。

      注意,字符串末尾的处理,防止越界。其次,字符可以直接转换为字符串。

      但是,该解法的效率并不高。

  方法二:类似方法一,是参考其他人的代码。

      先递归到n =1,再往后求n。【感觉两种方法复杂度是一样的,但不知道为什么第二种方法效率要高很多】

代码C++:

  方法一: 

class Solution {public:    string countAndSay(int n) {        if (n < 1 || n>30) return "";        string str = "1";        if (n == 1) return str;        int i = 1, count, j;        string newStr = "";        while (i < n) {            j = 0;            while (str[j] != '\0') {                count = 1;                while (str[j] != '\0' && str[j] == str[j + 1]) {                    ++j;                    ++count;                }                newStr = newStr + to_string(count);                newStr = newStr + str[j];                ++j;            }            str = newStr;            newStr = "";            ++i;        }        return str;    }};

  方法二:

class Solution {public:    string countAndSay(int n) {        if(n==1) return "1";        string strlast=countAndSay(n-1);        int count = 1;//计数        string res;//存放结果        for(int i=0;i

 

运行结果:

  方法一:执行用时 : 52 ms  内存消耗 : 76.2 MB

  方法二:执行用时 : 8 ms    内存消耗 : 9.1 MB

转载于:https://www.cnblogs.com/lpomeloz/p/10968687.html

你可能感兴趣的文章
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
php中的isset和empty的用法区别
查看>>
把word文档中的所有图片导出
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
正则表达式
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
加固linux
查看>>
WPF中Image显示本地图片
查看>>
[poj1006]Biorhythms
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
js千分位处理
查看>>
Mac---------三指拖移
查看>>
字符串类型的相互转换
查看>>
HTTP状态码
查看>>
iOS如何过滤掉文本中特殊字符
查看>>
基础学习:C#中float的取值范围和精度
查看>>
javaagent 简介
查看>>