题目
大致思路
-
本题,首先看出是一道递归题,然后利用StringBuilder的append方法,将所有的类型转换为字符类型,并且进行拼接。细节见注释。
代码实现
public String countAndSay(int n) {
// 第一个报数
if (n == 1)
return "1";
// 递归取得上一轮报数得到的字符串,然后根据此字符串进行报数
String former = countAndSay(n - 1);
// 获取字符串的第一个数字,
char first = former.charAt(0);
// 标记量
int count = 1;
// 创建StringBuilder对象sb
StringBuilder sb = new StringBuilder();
// 对我们拿到的上一轮的字符串former进行遍历,如果重复了,则先拼接字符串,再将计数count归1.
for (int i = 1; i < former.length(); i++) {
if (former.charAt(i) != first) {
sb.append(count);
sb.append(first);
first = former.charAt(i);
count = 1;
} else {
count++;
}
}
//最后再对字符进行拼接即可。
sb.append(count);
sb.append(first);
return sb.toString();
}