上午blog里说了这道题,嗯,睡个午觉改了下就出来了,原来的垃圾代码直接扔了,根据上午那个题代码改的,发现了string操作比int数组操作还是爽多了,直接上代码:
class Solution {
public:
int magicalString(int n) {
if(n==0)return 0;
string basic="12";
string temp="1";
string acc;
int sum=1;
int i=1,flag=0;//flag=0代表添2,flag=1代表添1
while(i<n){
for(;i<basic.size();i++){
if(basic[i]=='1'){
acc=flag==1?"1":"2";
sum+=1;
}
else
acc=flag==1?"11":"22";
temp+=acc;
flag=1-flag;
}
basic=temp;
}
i--;
while(i>=n){
if(basic[i]=='1'){
sum--;
}
i--;
}
return sum;
}
};
还是附赠一个测试用主函数(主函数日常写的糙...别吐槽,就是测试用用):
int main()
{
Solution solu;
int x=solu.magicalString(6);
cout<<x<<endl;
return 0;
}
中间wa了几次,都是边界有问题,自己写的记得测测1,3,4,5,11这几个数。