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
class Solution {
public String countAndSay(int n) {
if (n == 1) {
return "1";
}
StringBuilder lastSay = new StringBuilder("1");
for (int i = 2; i <= n; i++) {
lastSay = getCurrSay(lastSay);
}
return lastSay.toString();
}

private StringBuilder getCurrSay(StringBuilder lastSay) {
int count = 1;
lastSay.append('*');
StringBuilder sb = new StringBuilder();
for (int i = 0; i < lastSay.length() - 1; i++) {
if (lastSay.charAt(i) == lastSay.charAt(i + 1)) {
count += 1;
} else {
sb.append(count).append(lastSay.charAt(i));
count = 1;
}
}
return sb;
}
}

主要是这个问题描述有点儿迷.
1的count say是1, 这是base case.
2的话看1的count say是啥, 1是1, 那么就是1个1, 因此2的count say是1(个)1, 合在一起就是11.
3的话看2, 2是11, 那就是2个1, 因此是2(个)1, 合在一起就是21.
4的话看3, 3是21, 那就是1个2, 1个1; 因此是1(个)2 1(个)1 合在一起就是1211.

也就是连续出现的数字可以合在一起说. 单独的数字就单独说.

时间复杂度和空间复杂度不知道咋分析.