File tree 1 file changed +1
-29
lines changed
src/main/java/com/fishercoder/solutions
1 file changed +1
-29
lines changed Original file line number Diff line number Diff line change 1
1
package com .fishercoder .solutions ;
2
2
3
- /**
4
- * 481. Magical String
5
- *
6
- * A magical string S consists of only '1' and '2' and obeys the following rules:
7
-
8
- The string S is magical because concatenating the number of contiguous occurrences of characters '1' and '2' generates the string S itself.
9
-
10
- The first few elements of string S is the following: S = "1221121221221121122……"
11
-
12
- If we group the consecutive '1's and '2's in S, it will be:
13
-
14
- 1 22 11 2 1 22 1 22 11 2 11 22 ......
15
-
16
- and the occurrences of '1's or '2's in each group are:
17
-
18
- 1 2 2 1 1 2 1 2 2 1 2 2 ......
19
-
20
- You can see that the occurrence sequence above is the S itself.
21
-
22
- Given an integer N as input, return the number of '1's in the first N number in the magical string S.
23
-
24
- Note: N will not exceed 100,000.
25
-
26
- Example 1:
27
- Input: 6
28
- Output: 3
29
- Explanation: The first 6 elements of magical string S is "12211" and it contains three 1's, so return 3.
30
- */
31
3
public class _481 {
32
4
33
5
public static class Solution1 {
34
6
/**
35
7
* credit: https://discuss.leetcode.com/topic/74917/simple-java-solution-using-one-array-and-two-pointers
36
8
* Algorithm:
37
- *
9
+ * <p>
38
10
* 1. Create an int array a and initialize the first 3 elements with 1, 2, 2.
39
11
* 2. Create two pointers head and tail. head points to the number which will be used to generate new numbers.
40
12
* tail points to the next empty position to put the new number. Then keep generating new numbers until tail >= n.
You can’t perform that action at this time.
0 commit comments