题目分析
原题链接,登陆 LeetCode 后可用
用例子来说明一下这个题的要求:
从 1 开始:
(1)1:因为是 1 个 1,所以下一个字符串为 11
(2)11:因为是两个 1,所以下一个字符串为 21
(3)21:因为是 1 个 1,1 个 2,所以下一个字符串是 1211
(4)1211:因为是 1 个 1,1 个 2,两个 1,所以下一个字符串是 111221
(5)111221:因为是 3 个 1,两个 2,1 个 1,所以下一个字符串是 312211
(6)......
求第 n 个字符串是什么?
代码
public class Solution {
public String countAndSay(int n) {
String str = "1";
while (--n > 0) {
int i = 0;
int count = 1;
StringBuffer sb = new StringBuffer();
for (; i < str.length() - 1; i++) {
if (str.charAt(i + 1) == str.charAt(i)) {
count += 1;
} else {
sb.append(count).append(str.charAt(i));
count = 1;
}
}
sb.append(count).append(str.charAt(i));
str = sb.toString();
}
return str;
}
}
来源: http://www.jianshu.com/p/dccba8451b8b