先贴一下代码
class Solution {
public:
int magicalString(int n) {
vector<int>tmp;
tmp.push_back(1);
tmp.push_back(2);
tmp.push_back(2);
int v = 2; //从座标2开始制造字符串
int c = 0; //判断当前应该加的是1还是2
int ans = n>0 ? 1 : 0;
while(v < n && n>3)
{
if(!c) //如果当前应该加的是1
{
for(int i = 0;i<tmp[v];i++) //tmp[v]是应该加的数的个数
{
tmp.push_back(1);
ans++;
if(tmp.size() == n) return ans;
}
}
else
{
for(int i = 0;i<tmp[v];i++)
{
tmp.push_back(2);
if(tmp.size() == n) return ans;
}
}
v++;
c = (c+1)%2;
}
return ans;
}
};
其实在座标2时就可以开始制造这个字符串了,是有规律的,设定指针,判断当前添加1时应该添加几个1,添加2时应该添加几个2。然后往后移动一格,之前加的是1就换成2,以此类推即可。在制造字符串时同时记下1的个数,一旦字符串长度到达n就退出。