魔术字符串:JavaScript中的LeetCode问题

问题

一个神奇的字符串str仅由'1'和'2'组成,并遵循以下规则-

字符串str很有魔力,因为将字符“ 1”和“ 2”的连续出现次数串联起来即可生成字符串str本身。

字符串str的前几个元素如下-

str = "1221121221221121122……"

如果我们在str中将连续的“ 1”和“ 2”组合在一起,它将是-

1 22 11 2 1 22 1 22 11 2 11 22 ......

并且每个组中出现“ 1”或“ 2”的情况是-

1 2 2 1 1 2 1 2 2 1 2 2 ......

我们可以看到上面的出现顺序是字符串本身。

我们给定一个整数num作为输入,并且我们需要在魔术字符串str的第一个num数中返回“ 1”的数。

例如,如果函数的输入为-

const num = 6;

那么输出应该是-

const output = 3;

输出说明:

魔术字符串S的前6个元素是“ 12211”,其中包含三个1,因此返回3。

示例

为此的代码将是-

const num = 6;
const magicalString = (num = 1) => {
   let ind = 12;
   let str = '1221121221221121122';
   while(str.length < num){
      const end = str.substring(str.length - 1) === '2' ? '1' : '2';
      str = parseInt(str.substring(ind, ind + 1)) === 2 ? str + end + end : str + end;
      ind++;
   };
   return (str.substring(0, num).match(/1/g)||[]).length;
};
console.log(magicalString(num));
输出结果

控制台中的输出将是-

3