# leetcode481. Magical String

## 题目要求

```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.```

## 思路和代码

```    public int magicalString(int n) {
if(n == 0) return 0;
if(n <= 3) return 1;
int a[] = new int[n+1];
a[0] = 1;
a[1] = 2;
a[2] = 2;
int leftPointer = 2, rightPointer = 3, num = 1, count = 1;
while(rightPointer < n) {
for(int i = 0 ; i < a[leftPointer] && rightPointer < n ; i++) {
a[rightPointer++] = num;
if(num == 1) {
count++;
}
}
leftPointer++;
num ^= 3;
}
return count;
}```

0 条评论

• ### leetcode467. Unique Substrings in Wraparound String

假设存在一个从a-z26个字母无限循环的字符串s，现在输入一个字符串p，问该字符串有多少个子字符串在s中循环出现？

• ### leetcode 459. Repeated Substring Pattern

直观的思路就是选取所有可能的子字符串，并且将剩余的字符串按照等长截断，将每一段和预期的子字符串进行比较，判断是否相等。代码如下，可以参考注释理解：

• ### leetcode394. Decode String

将一个字符串解码，要求按照次数展开原字符串中的中括号。如3[a]2[bc]对应的字符串就是aaabcbc，即a展开3次，bc展开2次。注意，源字符串中的括号是允...

• ### 保障双11，90后美女工程师跟机器人“天巡”草原守机房

2017年的双11临近，对于多数人来说双11是购物的狂欢节日。而对于90后女孩小花（化名）和机器人“天巡”却是一份特别的责任。 小花是阿里张北数据中心的一名运维...

• ### N皇后

N皇后问题是计算机科学中最为经典的问题之一，该问题可追溯到1848年，由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题。 将N个皇后放摆放在N*N的棋盘中，互...

• ### 动态规划|相邻约束下的最优解(House Robber II )

01 House Robber II This time, all houses at this place are arranged in a circl...

• ### Linux服务器性能压力测试

对于新采购的服务器，需要进行有必要的性能测试。这里选择UnixBench工具进行性能测试。记录如下： 1）安装使用 下面的脚本使用了最新版UnixBench5....

• ### Flutter 省会选择器

上篇怎么说了Flutter的数据通信简单流程，这次我们基于此写一个plugin实现省会选择器

• ### 2018-10-02 你知道怎么new BigDecimal吗？

https://stackoverflow.com/questions/9795364/java-bigdecimal-precision-problems