https://leetcode.com/problems/magical-string/#/description
S = "1221121221221121122……"
观察特点:一个一、两个二、两个一、一个二。。。
这样依次重复数字出现个数组成的数字串又组成完全相同的S
head记录当前生成依据所在位置,tail记录当前要生成位置
public class Solution {
public int magicalString(int n) {
if (n == 0) {
return 0;
}
if (n <= 3) {
return 1;
}
//多开一位避免当前这个数是两位重复的
int[] arr = new int[n + 1];
// 当前依据的数字所在位置
int head = 2;
// 当前要生成的数字所在位置
int tail = 3;
arr[0] = 1;
arr[1] = 2;
arr[2] = 2;
int res = 1;
int num = 1;
while (tail < n) {
for (int i = 0; i < arr[head]; i++) {
arr[tail] = num;
if (num == 1 && tail < n) {
res++;
}
tail++;
}
// num是1的反转成2,是2的反转成1
num ^= 3;
head++;
}
return res;
}
}