题目
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
- 1
- 11
- 21
- 1211
- 111221
1 被读作 “one 1” (“一个一”) , 即 11。
11 被读作 “two 1s” (“两个一”), 即 21。
21 被读作 “one 2”, “one 1” (”一个二” , “一个一”) , 即 1211。
给定一个正整数 n ,输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例
输入: 1
输出: “1”
示例 2:
输入: 4
输出: “1211”
解题思路:报数,根据前一个字符串推断后一个字符串,分别对前一个字符串的字节报数,很容易想到递归,但是递归效率太低,LeetCode验证未通过,这里就不放代码了。以下用的循环实现:
public String countAndSay(int n) {
String s ="1";
if(n==1){
return s;
}
int i=1;
while(i<n){
char[] sArray = s.toCharArray();
int num =1;
String a ="";
for(int j=0;j<sArray.length;j++){
StringBuffer sBuffer = new StringBuffer();
if(j+1<sArray.length &&sArray[j]==sArray[j+1]){
num++;
}else{
sBuffer.append(num+String.valueOf(sArray[j]));
num=1;
}
a+=sBuffer.toString();
s=a;
}
i++;
}
return s;
}
题目地址:https://leetcode-cn.com/problems/count-and-say/description/