Count and Say
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.
解题思路:这道题就是一道字符串处理的问题,题意就是把上一个字符串的读数作为下一个字符串,然后依次类推。理解题意之后比较容易,但要注意结尾的地方,要增加判断前一个是重复的结尾,还是非重复的结尾。代码如下:
public String countAndSay(int n) {
if(n==1){
return "1";
}
if(n==2){
return "11";
}
String s = String.valueOf(11);
for (int i = 3; i <= n; i++) {
int index=0;
int count =1;
String s1 = new String();
int len = s.length();
int type =0;
while(index<len-1){
char c = s.charAt(index);
if(c==s.charAt(index+1)){
count++;
type=1;
}else{
s1+=count;
s1+=c;
count=1;
type=0;
}
index++;
if(index>=len-1){
if(type==1){
s1+=count;
s1+=c;
}else{
s1+=1;
s1+=s.charAt(index);
}
s=s1;
break;
}
}
}
return s;
}
这里提空一个更加优雅的解法,直接从1开始,比我的泛化能力更强。
http://blog.youkuaiyun.com/linhuanmars/article/details/20679963