报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1 2. 11 3. 21 4. 1211 5. 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"
这是一道笔试题,然后再Leecode 上也碰到了,一开始给我的感觉就是,题都没读懂,参考他们的代码,找的了一些思路,加上注释记录一下,方便自己和没理解的小伙伴们参考与回顾。
public String countAndSay(int n) {
String last = "1";
// 从第二项开始
for (int i=2 ;i<=n ;i++){
char cur = last.charAt(0); // 取第一个开始计数
int count = 1;
// 从角标为1的开始,也就是从第2项开始,与当前字符进行比较,
// 最开始当前字符为last.charAt(0),之后对cur进行刷新
StringBuilder stringBuilder = new StringBuilder();
for (int j=1; j<last.length(); j++){
if (last.charAt(j) == cur){
count++; // 相同计数器加1
}else {
// 不同就存一下,并cur更新为这个不同的值
stringBuilder.append(count).append(cur);
cur = last.charAt(j);
count = 1;
}
}
last = stringBuilder.append(count).append(cur).toString(); // 刷新
}
return last;
}