1 解题思想
这道题的就是,有一个只包含1和2的字符串,他有一个神奇的特性:
*如果将字符串按照1和2分组后,统计每组1或2出现的次数所拼接成的字符串,和这个字符串本身一样
我没做这道题。。感觉太烦,直接贴的别人的答案了,有兴趣我再来自己写
2 原题
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.
3 AC解
//此题来自Discuss的解
public class Solution {
public int magicalString(int n) {
StringBuilder magic = new StringBuilder("1221121221221121122");
int pt1 = 12, pt2 = magic.length(), count = 0;
while(magic.length() < n){
if(magic.charAt(pt1) == '1'){
if(magic.charAt(pt2-1) == '1') magic.append(2);
else magic.append(1);
pt2++;
}else{ //==2
if(magic.charAt(pt2-1) == '1') magic.append(22);
else magic.append(11);
pt2+=2;
}
pt1++;
}
for(int i=0;i<n;i++)
if(magic.charAt(i)=='1') count++;
return count;
}
}