思路:
这题的关键就是构造出这个神奇字符串s。很明显第一个数字1是由第一个数字1自己生成的,第二个数字2,是由第二个和第三个数字2生成的,此时我们将字符串初始化为"122",此时i=2,指向第二个2,接下来我们开始构造。这是利用vector进行操作会方便很多。
这里有个问题?
1.如何判断当前应该在容器中加入1还是2?
代码中的flag就是实现这个功能的,因为每次加入新的元素到容器中,容器最后的那个元素一定是上一次加入的元素,用3减去容器中国的最后一个元素,就可以交替得到1和2。(不要误以为是3减去s[i-1],因为当两个相邻元素相等时,很明显会出现错误)
知道要在容器中添加什么后,根据s[i]的值,得到添加的个数,直至将前n个元素填满。
使用count函数统计容器中1的个数。
class Solution {
public:
int magicalString(int n) {
vector<int>s={1,2,2};
int i=2,flag=0;
for(i;i<=n;i++){
flag=3-s.back();
for(int j=0;j<s[i];j++){
s.emplace_back(flag);
}
}
int cnt = count(s.begin(),s.begin()+n,1);
return cnt;
}
};