温馨提示: 豌豆仅提供国内节点,不提供境外节点,不能用于任何非法用途,不能访问境外网站及跨境联网。

免费领取1万IP!

Leetcode腾讯50题精选题解|报数问题

发布时间:

题目描述

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

  1. 1
  2. 11
  3. 21
  4. 1211
  5. 111221
    1 被读作 “one 1” (“一个一”) , 即 11。
    11 被读作 “two 1s” (“两个一”), 即 21。
    21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: “1”
示例 2:

输入: 4
输出: “1211”

解题思路以及知识点

  1. 此题我们很容易就得到题目报数的规律,由题目可以知道,6:312211,又因为题目中要求我们正整数为0~30,,所以我们可以采用暴力法,用switch语句来写,即:将0 ~30的所有报数方法,通过switch直接写出来!不过此中方法仅只限于n值比较小时,如果n比较大时,我们不推荐用!
  2. 由于我们知道本体数字报数的规律,并且知道n=1时,报数11,那么我们可以很容易想到斐波拉契数列,所以我们可以尝试用递归的方法解题!
  3. 运用递归,我们可以考虑将报数看为一系列数字字符串,那么我们就可以考虑用数组将至保存。

功能快捷键

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<strlast.size();i++)
        {
            if(strlast[i]==strlast[i+1])//计算有多少个相同数字
            {
                count++;
                continue;
            }
            else
            {
                if(strlast[i]!=strlast[i+1])
                {
                    res+=to_string(count)+strlast[i];
                    count=1;
                }
            }
        }
       return res;
    }
};
以上内容来自于网络,如有侵权联系即删除

相关文章


Postman实战 触发器 trigger day002 计算机基础之 操作系统和编程语言的分类 Python文件操作读,写,追加以及文件修改 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素 18款数据恢复软件打包分享(免费免积分) Java运算符介绍 C语言编程题:完美的素数

上一篇:进程池 + epoll 实现 http 服务器
下一篇:RLP编码原理
注册
联系我们
渠道合作
15866163259
大客户合作
15866163259
QQ群
qq