A magical string S consists of only '1' and '2' and obeys the following rules:
The string S is magical because concatenating the number of contiguous occurrences of characters '1' and '2' generates the string S itself.
The first few elements of string S is the following: S = "1221121221221121122……"
If we group the consecutive '1's and '2's in S, it will be:
1 22 11 2 1 22 1 22 11 2 11 22 ......
and the occurrences of '1's or '2's in each group are:
1 2 2 1 1 2 1 2 2 1 2 2 ......
You can see that the occurrence sequence above is the S itself.
Given an integer N as input, return the number of '1's in the first N number in the magical string S.
Note: N will not exceed 100,000.
Example 1:
Input: 6 Output: 3 Explanation: The first 6 elements of magical string S is "12211" and it contains three 1's, so return 3.
题目意思:一个字符串s,它连续相同的字符数量所组成的新的字符串t,有s=t;
如S = “1221121221221121122....”,连续相同的字符数量有1个1,2个2,2个1,1个2,1个1.....,数量所组成的新的字符串t = "1221121...",有s = t;
程序如下所示:
class Solution {
public int magicalString(int n) {
if (n == 0){
return 0;
}
StringBuilder sb = new StringBuilder("122");
int cnt = 1, index = 2;
int cur = 0;
while(true){
cur = sb.charAt(index) - '0';
if (cur == 1){
cnt++;
}
char c = sb.charAt(sb.length() - 1) == '1'?'2':'1';
for (int i = 0; i < cur; ++ i){
sb.append(c);
}
index ++;
if (index >= n){
break;
}
}
return cnt;
}
}