题目描述
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1
11
21
1211
111221
1 被读作 “one 1” (“一个一”) , 即 11。
11 被读作 “two 1s” (“两个一”), 即 21。
21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: “1”
示例 2:
输入: 4
输出: “1211”
题解
思路:简单的字符串操作,从头到尾遍历字符串,统计相邻字符串中相同字符的个数,一次添加到字符串中。
public String countAndSay(int n) {
StringBuilder str = new StringBuilder("1");
StringBuilder prev;
int count;
char say;
for (int i = 1;i < n;i++){
prev = str;
str = new StringBuilder();
count = 1;
say = prev.charAt(0);
for (int j = 1,len = prev.length();j < len;j++){
if (prev.charAt(j) != say){
str.append(count ).append(say);
count = 1;
say = prev.charAt(j);
}else {
count++;
}
}
str.append(count).append(say);
}
return str.toString();
}