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.
这道题比较简单,我第一遍就可以写程序。但是还是有bug,见程序中注释。
我的方法:Recursive
public class Solution {
public String countAndSay(int n) {
//System.out.println("n = " + n);
if(n <=0) return null;
if(n == 1) return "1";
String pre = countAndSay(n-1);
StringBuffer sb = new StringBuffer();
//System.out.println(preNum);
int count = 1;
for(int i = 0; i < pre.length();i++){//must use pre.length() not pre.length()-1, else cannot deal with string = "1" (pre.length()==1)
if(i < pre.length()-1 && pre.charAt(i) == pre.charAt(i+1)){//add i < pre.length()-1 to prevent overflow
count ++;
}
else{
//sb.append(count + pre.charAt(i));//cannot use sb.append(count + pre.charAt(i));
sb.append(count).append(pre.charAt(i));
count = 1;
}
}
return sb.toString();
}
}
Todo: Iterative @7.8.2014