The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 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 sequence.
Note: The sequence of integers will be represented as a string.
1 根据题目的描述,逻辑思路其实很明确。每次都需要前一次的记录,然后根据这个记录,遍历每个字符,生成这次的记录,作为下次的参考。
2 但是当中怎么处理是很容易出现失误的。如果在计算的时候用int或者long,对于这个题目很容易溢出。所以直接用string来处理是比较好的选择。
3 每次碰到数字字符串处理都要注意溢出的可能。
public class Solution {
public String countAndSay(int n) {
if(n<=0){
return "";
}
if(n==1){
return "1";
}
String pre = "1";
for(int i=2;i<=n;i++){
String curnum ="";
int num = pre.length();
char curchar = pre.charAt(0);
int charnum = 1;
for(int j=1;j<num;j++){
if(pre.charAt(j)==curchar){
charnum++;
}
else{
curnum +=Integer.toString(charnum)+curchar;
curchar = pre.charAt(j);
charnum=1;
}
}
curnum +=Integer.toString(charnum)+curchar;
pre = curnum;
}
return pre;
}
}