题目
思路1(清晰)
class Solution {
public static String countAndSay(int n) {
StringBuffer pre = new StringBuffer("1");
StringBuffer cur = new StringBuffer("1");
for (int i = 1; i < n; i++) {
pre = cur; //保存前一项
cur = new StringBuffer();
int start = 0, end = 0;
//开始遍历前一项,开始描述
while (end < pre.length()) {
while (end < pre.length() && pre.charAt(start) == pre.charAt(end)) {
end++;
}
//元素出现次数与元素进行拼接
cur = cur.append(Integer.toString(end - start)).append(pre.charAt(start));
start = end;
}
}
return cur.toString();
}
}
思路2
思路还不是很清晰,下来再想想
class Solution1 {
public static String countAndSay(int n) {
StringBuilder result = new StringBuilder();
result.append(1);
for (int i = 1; i < n; i++) {
// 记录当前行的字符串
StringBuilder s = new StringBuilder();
// 记录每个数字的开始索引
int start = 0;
for (int j = 1; j < result.length(); j++) {
// 当数字发生改变时执行
if (result.charAt(j) != result.charAt(start)) {
s.append(j - start).append(result.charAt(start));
start = j;
}
}
// 字符串最后一个数字
// System.out.println(result.length() - start);//测试 1 2 1 2
// System.out.println(result.charAt(start));//测试 1 1 1 1
s.append(result.length() - start).append(result.charAt(start));
result = s;
// System.out.println(s); //测试 11 21 1211 111221 s记录当前行的字符串
// System.out.println("-------------------------");//测试
}
return result.toString();
}
}