题目链接:
题目:
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1
is read off as"one 1"
or11
.11
is read off as"two 1s"
or21
.21
is read off as"one 2
, thenone 1"
or1211
.Given an integer n where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
Example 1:
Input: 1 Output: "1"
Example 2:
Input: 4 Output: "1211"
题目分析:
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。
题目有点绕口,其实就是下一个人是对上一个人的报数进行报数。
比如上一个是1211,那么下一个是1个1,1个2,2个1,所以合起来就是111221。
解题思路:
是一道字符串处理题,在Java中,关于不断修改字符串的话,可以用到 StringBuilder() 这个类。
就是一道递归题。就是一个对上一个人的报数进行计数,遍历计数,如果相同,则连续看有几个,当出现不同数字,就重新计数。这样子把计数结果存起来即可。
AC代码:(Java)
class Solution {
public String countAndSay(int n) {
String cur=String.valueOf(1);
for(int i=1;i<n;++i){
StringBuilder sb=new StringBuilder();
for(int j=0,k=0;j<cur.length();j=k){
while(k<cur.length() && cur.charAt(k)==cur.charAt(j)){
++k;
}
sb.append(k-j);
sb.append(cur.charAt(j));
}
cur=sb.toString();
}
return cur;
}
}