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