• 大家好,我是练习时长两年半的LeetCode爱好者,喜欢唱跳rap


    
     

    点击蓝色“五分钟学算法”关注我哟

    加个“星标”,一起学算法

    640?wx_fmt=jpeg

    
     

    今天分享一道很 rap 的算法题目。

    题目来源于 LeetCode 上第 38 号问题:报数。题目难度为 Easy,目前通过率为 50.7% 。

    题目描述

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

    1. 12. 113. 214. 12115. 111221
    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"
    输出: "1"

    示例 2:

    输入: 4输出: "1211"
    输出: "1211"

    题目解析

    这道题目的难点在于题目的理解。

    我看了一下 LeetCode 的评论区,绝大部分人都是在吐槽没看懂题目。题目的确比较绕,读了几篇才看明白。

    题目讲的是后续的相应的 输出数字 依据的是它之前的 输出数字

    看懂了 题意,借助 递归 的概念,这道题的基本上就很好求解了。

    动画描述

    以报数字 6 为例。

    代码实现

    // c++class Solution {public: string countAndSay(int n) {        //递归终止的条件        if(n == 1) return "1";        string prevResult = countAndSay(n-1);        int count = 1;//计数        string nowResult;//存放结果        for(int i = 0 ; i < prevResult.length();i++){            //统计有多少个相同数字            if(prevResult[i] == prevResult[i+1]){                count++;                continue;            }else{                if( prevResult[i] != prevResult[i + 1]) {                    nowResult += to_string(count) + prevResult[i];                    //重置开始统计其他的数字                    count = 1;                }            }        }       return nowResult;    }};
    class Solution {
    publicstring countAndSay(int n) {
            //递归终止的条件
            if(n == 1return "1";
            string prevResult = countAndSay(n-1);
            int count = 1;//计数
            string nowResult;//存放结果
            for(int i = 0 ; i < prevResult.length();i++){
                //统计有多少个相同数字
                if(prevResult[i] == prevResult[i+1]){
                    count++;
                    continue;
                }else{
                    if( prevResult[i] != prevResult[i + 1]) {
                        nowResult += to_string(count) + prevResult[i];
                        //重置开始统计其他的数字
                        count = 1;
                    }
                }
            }
           return nowResult;
        }
    };


    END

    640?wx_fmt=png

     原 创 热 文 推 荐 


    毕业十年后,我忍不住出了一份程序员的高考试卷

    一道腾讯面试题:厉害了我的杯

    十大经典排序算法动画与解析,看我就够了

    这或许是东半球分析十大排序算法最好的一篇文章

    面试官,我会写二分查找法!对,没有 bug 的那种!


    640?wx_fmt=png 你点的每个“在看”,我都认真当成了喜欢


  • 相关阅读:
    刷题(十五)
    Pycharm按装
    Jmeter
    内存泄露部分检测工具
    Failed to resolve
    图片显示方向不对怎么办
    ScaleType属性
    RobotFramework
    LoadRunner
    Appium
  • 原文地址:https://www.cnblogs.com/csnd/p/16675305.html
Copyright © 2020-2023  润新知