解决方法总结:找出规律进行预处理推算结果,学会位运算 ^ 对1和2进行顺序轮换处理,掌握字符串单个字符复制方法
class Solution
{
public:
int magicalString(int n)
{
string s = "122";
int ptr = 2;
while (s.size() < n)
{
//3=11 11^10=01 11^01=10 表示1和2之间转换,因为按1和2分组后,每换一组就变换1组成还是2组成
s += string(s[ptr++] - '0', s.back() ^ 3);//构造一个字符串,第一个参数表示要复制的字符的个数,第二个参数表示要复制的字符
}
int count = 0;
for (int i = 0; i < n; ++i)
{
if (s[i] == '1')
{
count++;
}
}
return count;
}
};