原文:38. 报数(力扣 面试题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-038/

题目:

难度:Easy

相关话题:字符串

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

1.     1
2.     11
3.     21
4.     1211
5.     111221

1 被读作 "one 1" ( "一个一" ) , 即 1111 被读作 "two 1s" ( "两个一" ), 即 2121 被读作 "one 2" , “ one 1""一个二" , "一个一" ), 即 1211

给定一个正整数 n (1 ≤n ≤ 30),输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

示例1:

输入: 1
输出: "1"

示例 2:

输入: 4
输出: "1211"

思路:

按照题意从i===2开始,读出s,并且更新s,直到i>n

这里的,就是对连续数字一个合并,例如11112,前面有41连续,因此读为41,后面12,读为12,连在一起就是4112

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {
  let s='1'
  for(let i=2;i<=n;i++){
    let cur=s[0],count=1,news=''
    for(let j=1;j<s.length;j++){
      if(s[j]===s[j-1]){
        count++
      }else{
        news+=count+''+cur
        cur=s[j]
        count=1
      }
    }
    s=news+count+cur
  }
  return s
};

扩展阅读: