原题:(频率2)
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"
or 11
.
11
is read off as "two 1s"
or 21
.
21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n, generate the nth term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string
题意:题意是n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。
代码和思路:
class Solution {
public String countAndSay(int n) {
if(n==1){
return "1";
}
//加上*是为了在判断最后一个c[i]==c[i+1] 不会数组越界
String str = countAndSay(n-1)+"*";
//把n-1的数化成数组
char [] c = str.toCharArray();
int count = 1;
String result = "";
//这里length-1就跳去了对*的判断
for(int i=0;i<c.length-1;i++){
//如11 那么就有 两个一
if(c[i]==c[i+1]){
count++;
}
else{
//如果不与i+1相等了,那么就先把这个数字进行结算,重置count
result = result + count +c[i];
count = 1;
}
}
return result;
}
}