友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。
公众号的微信号是: jikerizhi 。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
38. Count and Say
看懂了这道题,相声就已经入门了……
Matrix67 的解释 Conway常数是怎么得来的? | Matrix67: The Aha Moments 还是非常浅显易懂的!
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1
is read off as "one 1"
or 11
.
11
is read off as "two 1s"
or 21
.
21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence. You can do so recursively, in other words from the previous member read off the digits, counting the number of digits in groups of the same digit.
Note: Each term of the sequence of integers will be represented as a string.
Example 1:
Input: 1 Output: "1" Explanation: This is the base case.
Example 2:
Input: 4 Output: "1211" Explanation: For n = 3 the term was "21" in which we have two groups "2" and "1", "2" can be read as "12" which means frequency = 1 and value = 2, the same way "1" is read as "11", so the answer is the concatenation of "12" and "11" which is "1211".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* Runtime: 3 ms, faster than 40.24% of Java online submissions for Count and Say.
*
* Memory Usage: 40.9 MB, less than 5.26% of Java online submissions for Count and Say.
*/
public String countAndSay(int n) {
String result = "1";
if (n == 1) {
return result;
}
StringBuilder builder;
for (int i = 1; i < n; i++) {
builder = new StringBuilder();
char[] chars = result.toCharArray();
Character prefix = null;
int count = 0;
for (int j = 0; j < chars.length; j++) {
char current = chars[j];
if (Objects.isNull(prefix)) {
prefix = current;
++count;
} else {
if (Objects.equals(prefix, current)) {
++count;
} else {
builder.append(count).append(prefix);
prefix = current;
count = 1;
}
}
if (j == chars.length - 1) {
builder.append(count).append(prefix);
}
}
result = builder.toString();
}
return result;
}