-
题目:38. 报数(简单题)
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:- 1
- 11
- 21
- 1211
- 111221
解释题意
:
第一个:初始化为“1”
第二个:上一个的“1”用规则表示出来就是“1个1”,即“11”。
第三个:上一个的“11”用规则表示出来就是“2个1”,即“21”。
第四个:上一个的“21”用规则表示出来就是“1个2,1个1”,即“1211”。
…
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。 -
示例 1:
输入: 1
输出: “1” -
示例 2:
输入: 4
输出: “1211” -
思路
理解题意很重要,让求第n个对应的字符串,那么得先知道第n-1个对应的字符串,然后把该字符串,用以上的规则表示出来,就得到了第n个对应的字符串。
public class CountAndSay {
public String countAndSay(int n) {
if(n==1)
return "1";
StringBuilder sb=new StringBuilder();
//找到n-1的结果
String str=countAndSay(n-1);
//对n-1的结果进行表示
char c='0';
int count=0;
for (int i=0;i<str.length();i++){
c=str.charAt(i);
count=1;
while ((i+1)<str.length()&&str.charAt(i+1)==c){
count++;
i++;
}
sb.append(count+""+c);
}
return sb.toString();
}
}