zoukankan      html  css  js  c++  java
  • 刷题-力扣-38. 外观数列

    38. 外观数列

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/count-and-say/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给定一个正整数 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"
    要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。
    

    例如,数字字符串 "3322251" 的描述如下图:

    示例 1:

    输入:n = 1
    输出:"1"
    解释:这是一个基本样例。
    

    示例 2:

    输入:n = 4
    输出:"1211"
    解释:
    countAndSay(1) = "1"
    countAndSay(2) = 读 "1" = 一 个 1 = "11"
    countAndSay(3) = 读 "11" = 二 个 1 = "21"
    countAndSay(4) = 读 "21" = 一 个 2 + 一 个 1 = "12" + "11" = "1211"
    

    提示:

    • 1 <= n <= 30

    题目分析

    1. 根据题目描述后一个字符串描述前一个字符串
    2. 遍历前一个字符串,并统计字符出现的次数,再把字符出现的次数和字符加入到后一个字符串中

    代码

    class Solution {
    public:
        string countAndSay(int n) {
            vector<string> describe;
            describe.push_back("1");
            for (int j = 0; j < n - 1; ++j) {
                int n = describe.size() - 1;
                int sum = 1;
                string s = "";
                int i = 0;
                for (i = 0; i < describe[n].size() - 1; ++i) {
                    if (describe[n][i] == describe[n][i + 1]) ++sum;
                    else {
                        s = s + to_string(sum) + describe[n][i];
                        sum = 1;
                    }
                }
                s = s + to_string(sum) + describe[n][i];
                describe.push_back(s);
            }
            return describe[n - 1];
        }
    };
    
  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/HanYG/p/14666391.html
Copyright © 2011-2022 走看看