zoukankan      html  css  js  c++  java
  • 38. 外观数列

    题目描述: 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
    1 被读作  "one 1"  ("一个一") , 即 11。
    11 被读作 "two 1s" ("两个一"), 即 21。
    21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211。
    给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。
    注意:整数序列中的每一项将表示为一个字符串。

    • 迭代:计算出每项的字符串直到第n项,每次都遍历前一项的字符串,计算出新一项的字符串
    //JS
    
    var countAndSay = function(n) {
        let preStr = "1", newStr = "", tmp = "", cnt = 0;
        for(let i = 1; i < n; i++){ //计算每一项的字符串
            newStr = "";
            tmp = preStr[0];
            cnt = 0;
            for(let j = 0; j < preStr.length; j++){ //生成新一项的字符串
                if(tmp == preStr[j]) cnt++;
                else {
                    newStr += cnt + tmp;
                    tmp = preStr[j];
                    cnt = 1;
                }
            }
            preStr = newStr + cnt + tmp;
        }
        return preStr;
    };
    
    • 递归:其实就是用递归实现了外层循环
    //JS
    
    var countAndSay = function(n) {
        if(n == 1) return "1";
    
        let preStr = countAndSay(n - 1);
        let dfs = (str) => {
            let newStr = "", tmp = str[0], cnt = 0;
            for(let i = 0; i < str.length; i++){ //生成新一项的字符串
                if(tmp == str[i]) cnt++;
                else {
                    newStr += cnt + tmp;
                    tmp = str[i];
                    cnt = 1;
                }
            }
            str = newStr + cnt + tmp;
            return str;
        }
    
        return dfs(preStr);
    };
    • 正则替换法:利用正则中1的反向引用,把所有连续的数字都替换
    //JS
    
    var countAndSay = function(n) {
        let preStr = "1";
        for(let i = 1; i < n; i++){
            preStr = preStr.replace(/(d)1*/g, item => `${item.length}${item[0]}`);
        }
        return preStr;
    };
    

      

  • 相关阅读:
    C#
    C#
    ssh学习笔记
    (已解决)Could not open '/var/lib/nova/mnt/*/volume-*': Permission denied
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    如何在linux下安装idea
    The system has no LUN copy license
    调整mysql数据库最大连接数
    mysql数据库编码问题
    cinder支持nfs快照
  • 原文地址:https://www.cnblogs.com/JesseyWang/p/13084081.html
Copyright © 2011-2022 走看看