在 JavaScript 中生成第 n 次查找和说出数字的序列

问题

在数学中,look-and-say 序列是如下开头的整数序列 -

1, 11, 21, 1211, 111221, 312211, …

为了从前一个成员生成序列的一个成员,我们读取前一个成员的数字,计算相同数字组中的数字数量。

例如,1211 的下一个数字是 -

111221

因为如果我们大声读出 1211 的数字,它将是 -

One one, one two, two one which gives us 111221

我们需要编写一个 JavaScript 函数,它接受一个数字 n 并返回 look and say 序列的前 n 个术语。

示例

以下是代码 -

const num = 12;

const generateSequence = (num = 1) => {

   const lookAndSay = (val) => {

      let res = '';

      let chars = (val + ' ').split('');

      let last = chars[0];

      let count = 0;

      chars.forEach(c => {

         if(c === last){

            count++;

         }else{

            res += (count + '') + last;

            last = c;

            count = 1;

         };

      });

      return res;

   }

   let start = 1;

   const res = [];

   for(let i = 0; i < num; i++){

      res.push(String(start));

      start = lookAndSay(start);

   };

   return res;

};

console.log(generateSequence(num));

输出结果

以下是控制台输出 -

[

   '1',

   '11',

   '21',

   '1211',

   '111221',

   '312211',

   '13112221',

   '1113213211',

   '31131211131221',

   '13211311123113112211',

   '11131221133112132113212221',

   '3113112221232112111312211312113211'

]

以上是 在 JavaScript 中生成第 n 次查找和说出数字的序列 的全部内容, 来源链接: utcz.com/z/349138.html

回到顶部