题目;
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时,直接返回“1”;
假设发f(k)已经求出,记为s,那么我们只需统计s中的重复字符即可,每一段重复的字符重新编码成”count“+“char”的形式,再依次拼接起来即可。
public class No37_CountAndSay {
public static void main(String[] args){
System.out.println(countAndSay(5));
}
public static String countAndSay(int n) {
if(n == 1) return "1";
String ret = "";
String s = countAndSay(n-1);
int index = 0;
int count = 0;
char pre = '\0';
while(index < s.length()){
if(s.charAt(index) != pre){
if(count > 0) ret = ret+count+pre;
pre = s.charAt(index);
index++;
count = 1;
continue;
}
count++;
index++;
}
ret = ret+count+pre;
return ret;
}
}