解题代码:
classSolution {
public:
int magicalString(int n) {
if(n<=0)
return 0;
else if(n<=3)
return 1;
int count=1,j=3,last=2;
string str="122";
for(int i=2;j<n;i++){
if(str[i]=='1'){
if(last==1){
str+="2";
last=2;
j++;
}
else{
str+="1";
last=1;
count++;
j++;
}
}
else{
if(last==1){
str+="22";
last=2;
j+=2;
}
else{
str+="11";
last=1;
if(j+2>n){
count++;
j+=2;
}
else{
count+=2;
j+=2;
}
}
}
}
return count;
}
};
解题思路:
根据题目要求,输出前n位的magicalstring中1的数量。重点在于了解magicalstring的构造方法。因此若n为1到3之间的数,返回1,若n大于3,构造字符串“122”,根据magicalstring的规则,第三位为“2”,则后面需要添加连续的两个相同的数“11”,然后看第四位为“1”,因此后面需要添加一个数“2”;以此类推,直到构造出长度为n的magicalstring为止,同时可以算出前n位“1”的个数。