您的位置:首页 > 其它

Leetcode 481. Magical String 魔幻字符串 解题报告

2017-01-13 16:03 323 查看

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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode