LeetcodeApr 20, 2025

Magical String

Hazrat Ali

Leetcode

A magical string s consists of only '1' and '2' and obeys the following rules:

  • The string s is magical because concatenating the number of contiguous occurrences of characters '1' and '2' generates the string s itself.

The first few elements of s is s = "1221121221221121122……". If we group the consecutive 1's and 2's in s, it will be "1 22 11 2 1 22 1 22 11 2 11 22 ......" and the occurrences of 1's or 2's in each group are "1 2 2 1 1 2 1 2 2 1 2 2 ......". You can see that the occurrence sequence is s itself.

Given an integer n, return the number of 1's in the first n number in the magical string s.

 

Example 1:

Input: n = 6
Output: 3
Explanation: The first 6 elements of magical string s is "122112" and it contains three 1's, so return 3.

Example 2:

Input: n = 1
Output: 1

Solution
/**
 * @param {number} n
 * @return {number}
 */
const magicalString = n => {
  let s = '122';
  let i = 2;

  while (s.length < n) {
    const nextChar = `${parseInt(s.slice(-1)) ^ 3}`;
    const count = s[i++] - '0';
    s += nextChar.repeat(count);
  }

  return countOnes(s, n);
};

const countOnes = (s, n) => {
  let count = 0;
  for (let i = 0; i < n; i++) {
    count += s[i] === '1' ? 1 : 0;
  }
  return count;
};


Comments