The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 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, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
base case
是1
。写一个read()
函数,负责把之前的一个数字朗读出来。然后递归调用read()
函数,朗读之前朗读出来的结果。
public class Solution {
public String countAndSay(int n) {
if (n < 1) { return ""; }
if (n == 1) { return "1"; }
return read(countAndSay(n-1));
}
public String read(String s) {
int cursor = 0, count = 1;
char reg = s.charAt(cursor);
StringBuilder sb = new StringBuilder();
while (++cursor < s.length()) {
char c = s.charAt(cursor);
if (c != reg ) {
sb.append(Integer.toString(count)).append(reg);
reg = c;
count = 1;
} else {
count++;
}
}
sb.append(Integer.toString(count)).append(reg);
return sb.toString();
}
}
不错。应该没有更高级别银弹了。
public class Solution {
public String countAndSay(int n) {
if (n < 1) { return ""; }
String bootstrap = "1";
while (--n > 0) {
bootstrap = read(bootstrap);
}
return bootstrap;
}
public String read(String s) {
int cursor = 0, count = 1;
char reg = s.charAt(cursor);
StringBuilder sb = new StringBuilder();
while (++cursor < s.length()) {
char c = s.charAt(cursor);
if (c != reg) {
sb.append(Integer.toString(count)).append(reg);
reg = c;
count = 1;
} else {
count++;
}
}
sb.append(Integer.toString(count)).append(reg);
return sb.toString();
}
}
nice!