Solution:
Need to find some pattern for this question. After careful observation, it is found that:
1): the 1 and 2 groups appears alternatively;
2): the numbers of char inside each group are determined by the previous sequential char value in the same string (that's one of reasons why it is magical, as indicated);
Code:
public:
int magicalString(int n) {
if(n<1) return 0;
if(n<4) return 1;
int res = 1;
string s = "122";
for(int i=2, t=2; i<n; ++i){// t as the flag to be 1 or 2 for adding;
if(s[i] == '1'){
++res;
if(t == 1){
s += "2";
t = 2;
}
else{
s += "1";
t = 1;
}
}
else{
if(t == 1){
s += "22";
t = 2;
}
else{
s += "11";
t = 1;
}
}
}
return res;
}
};
No comments :
Post a Comment