LeetCode
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.
题目的大意就是找到第N个序列的字符串。
1、首先我们发现每一个后面的字符串都严重依赖前面一个字符床,我们想到完全可以通过递归解决的,83.80%。
public class Solution {
public String countAndSay(int n) {
if(n == 1)
{
return "1";
}else{
String ret = countAndSay(n-1);
StringBuffer sb = new StringBuffer();
int count = 1;
int i = 0;
for(i = 0;i < ret.length()-1;i++){
if(ret.charAt(i) == ret.charAt(i+1)){
count ++;
continue;
}else{
sb.append(count);
sb.append(ret.charAt(i)-'0');
count = 1;
}
}
sb.append(count);
sb.append(ret.charAt(i)-'0');
return sb.toString();
}
}
}
2、当然如果可以递归一般都可以不需要递归解决的。战胜了43.38% , 竟然没有递归快
public class Solution {
public String countAndSay(int n) {
String ret = "1";
for(int j = 1;j<n;j++){
int count = 1;
int i = 0;
StringBuffer sb = new StringBuffer();
for(i = 0;i < ret.length()-1;i++){
if(ret.charAt(i) == ret.charAt(i+1)){
count ++;
continue;
}else{
sb.append(count);
sb.append(ret.charAt(i)-'0');
count = 1;
}
}
sb.append(count);
sb.append(ret.charAt(i)-'0');
ret = sb.toString();
}
return ret;
}
}