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;
    };
    

      

  • 相关阅读:
    drupal drush 在windows下的安装和配置
    Drupal 7 配置ckeditor和ckfinder编辑器实现图片上传--不用wysisyg
    阿里云Centos配置iptables防火墙
    25个最常用的iptables策略
    防简单攻击iptables策略
    iptables防DDOS攻击和CC攻击设置
    Linux Web服务器网站故障分析常用的命令
    Linux/CentOS防CC攻击脚本
    Map字符串类型去掉空格处理
    读文件字节流大小的动态设置
  • 原文地址:https://www.cnblogs.com/JesseyWang/p/13084081.html
Copyright © 2011-2022 走看看