Magical String LeetCode solution in Java
1class Solution {2public int magicalString(int n) {3if (n <= 3) return 1;4Magical m = new Magical();5int ans = 1;6for (int i = 3; i < n; ++i) if (m.next() == 1) ++ans;7return ans;8}9}1011class Magical {1213private Deque<Integer> nums;14private int n;1516public Magical() {17nums = new ArrayDeque<>();18nums.offerLast(1);19nums.offerLast(1);20n = 1;21}2223public int next() {24if (n-- < 0) {25int c = nums.pollFirst();26n = c - 2;27int curr = 3 - nums.peekLast();28for (; c > 0; --c) nums.offerLast(curr);29return curr;30}31return nums.peekLast();32}33}