本题其实很简单,开头序列为[1,2,2],之后可以直接迭代出剩余的部分。已知如果现在数字序列是[1,2,2]时,字符串序列为['1','22'],那么需要第三个数字迭代(加粗的2),添加进'11'到字符串序列的同时也会添加进2个1到数字序列变为[1,2,2,1,1],这样的话,下一轮迭代用的就是1(加粗的1)。因此可以归纳为添加的数字、个数是已有序列迭代的前面部分迭代出来的,因此,根本不需要字符串序列,仅需要一个array即可完成计数。
class Solution:
def magicalString(self, n: int) -> int:
if n<=3:
return 1
arr=[1,2,2]
i=2
ret=1
while len(arr)<n:
item=2 if arr[-1]==1 else 1
k=arr[i]
i+=1
tmp=[item]*k
if item==1:
if len(arr)+k<n:
ret+=k
else:
ret+=sum(tmp[:n-len(arr)])
arr+=tmp
return ret