input n
s = "122"
read = 3
write = 4
while write <= n {
count = s[read]
// 为了避免出现连数的情况 `111111` 或 `222222`
// 数字必然要和末尾相反
v = 3 - s[write - 1]
// 主指针读到几,从指针就追加几个数字
for i in 0..count {
s[write] = v
write++
}
read++
}
代码如下
function magicalString(n) {
const s = [1, 2, 2]
for (let i = 2; s.length < n; i++) {
const v = 3 - s[s.length - 1]
for (let k = 0; k < s[i] && s.length < n; k++) s.push(v)
}
let ones = 0
for (let i = 0; i < n; i++) if (s[i] === 1) ones++
return ones
}