• Leetcode-38.外观数列


    38. 外观数列

    给定一个正整数 n ,输出外观数列的第 n 项。

    「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。

    你可以将其视作是由递归公式定义的数字字符串序列:

    • countAndSay(1) = "1"
    • countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。

    前五项如下:

    1.     1
    2.     11
    3.     21
    4.     1211
    5.     111221
    第一项是数字 1 
    描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 "11"
    描述前一项,这个数是 11 即 “ 二 个 1 ” ,记作 "21"
    描述前一项,这个数是 21 即 “ 一 个 2 + 一 个 1 ” ,记作 "1211"
    描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 "111221"
    

    描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。

    • 1 <= n <= 30

    由于测试样例很少,所以可以提前写个程序都算出来,然后根据n返回,(面向测试用例编程_

    正常做法就是递归加循环遍历。

    class Solution {
    public:
        string countAndSay(int n) {
            if (n == 1) return to_string(1);
            string pre_s = countAndSay(n - 1);
            string result = "";
            bool start = true;
            char current_char;
            int current_num = 0;
            for (char c : pre_s) {
                if (start == true) {
                    current_char = c;
                    current_num += 1;
                    start = false;
                } else {
                    if (c == current_char) {
                        current_num += 1;
                    } else {
                        result = result + to_string(current_num) + current_char;
                        current_char = c;
                        current_num = 1;
                    }
                }
            }
            result = result + to_string(current_num) + current_char;
            return result;
        }
    };
    
  • 相关阅读:
    Ubuntu14.04下Sublime Text 3解决无法输入中文
    100% 解决wine中文乱码问题
    历史朝代顺序表
    HTTP状态码分类
    Kali Linux 2019
    多线程下载器(针对于百度云下载)
    百度云破解版&&第三方下载工具&&分享链接无需提取码直接下载
    MongoDB 4.0.10 GridFS操作
    MongoDB 4.0.10 游标
    MongoDB 4.0.10 用户管理
  • 原文地址:https://www.cnblogs.com/eggplant-is-me/p/13984866.html
Copyright © 2020-2023  润新知