解题思路
根据题意,我们可以把 ss 看成是由「11 组」和「22 组」交替组成的,重点在于每组内的数字是一个还是两个,这可以从 ss 自身上知道。
构造到 ss 的长度达到 nn 时停止。
注意最后一次构造可能会填入两个数,导致 ss 的长度为 n+1n+1,因此最后统计 11 的个数时,应统计 ss 的前 nn 个数,而不是整个 ss。
核心代码:
class Solution {
public:
int magicalString(int n) {
string s = "\1\2\2"; // 值就是 1,2,2,这样就可以直接用 s[i] 当作个数
for (int i = 2; s.length() < n; ++i)
s += string(s[i], s.back() ^ 3); // 1^3=2, 2^3=1,这样就能在 1 和 2 之间转换
return count(s.begin(), s.begin() + n, 1);
}
};
标签:begin,string,ss,个数,Magical,int,Leetcode,481
From: https://www.cnblogs.com/hql5/p/16845884.html