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.
这道题目要求生成第n个序列。先要弄明白序列如如何生成的。
序列的第一个值为1。
第二个值为对前一个值进行count后的结果,"1" 有1个1, 记为11
第三个值为对第二值进行count后的结果, "11"有2个1, 记为21
第四个值对第三个值进行count, "21", count为1个2,1个1,记为1211
... 这就是序列产生的规律了,当前的值是对前一个值进行count, say后的结果。
所以,核心的问题是结果如何根据前一个值,产生当前值。
方法是对string中的元素进行遍历,并且进行计数。
运行时间:
代码:
public class CountandSay {
public String countAndSay(int n) {
String pre = "1";
for (int i = 2; i <= n; i++) {
System.out.println(pre);
pre = change(pre);
}
return pre;
}
private String change(String pre) {
StringBuilder sb = new StringBuilder();
int begin = 0, count = 1;
while (begin < pre.length()) {
while (begin + 1 < pre.length() && pre.charAt(begin + 1) == pre.charAt(begin)) {
count++;
begin++;
}
sb.append(count);
sb.append(pre.charAt(begin));
begin++;
count = 1;
}
return sb.toString();
}
}