结合别人的总结加上自己的理解,如有不对或者理解错误之处请指出;
problem:
1. 1
2. 11
3. 21
4. 1211
5. 111221
我用的递归算法
其实我不是很理解递归的含义,目前我对递归的含义的理解:
把一个大问题化解成小问题一步一步剖析,直至解决问题(应该是这样吧)
这道题从1开始,第二个开始解释第一个数,也就是count-and-say(计数和叙说)
First of all:
输入的值不能为0和负值,先排除这两种情况,所以为:
if(n<=0){
return "";
}
Secondly:
然后从1开始,先设置一个for循环,用来遍历1到n
设置String变量且赋值为1,
StringBuffer是可变字符串
整型count用来表示计数,待会会用到
String str ="1";
for(int i=1;i<n;i++){
StringBuffer stb = new StringBuffer("");
int count=1;
}
Third:
在for循环中再增加一个for循环,用来叙说
if是用来判断前一个和后一个是否相同:
如果相同,则count++退出循环,然后使用append方法在stb末尾加上count的数,然后再用append方法把刚才判断相同的数添加到末尾,就形成了叙说的功能;
如果不同,就可以直接使用append方法在末尾叙说了
for(int i=1;i<n;i++){
String str ="";
int count = 1;
for(int j=1;j<str.length()-1;j++){
StringBuffer stb = new StringBuffer("");
if(str.charAt(j-1)==str.charAt(j)){
count++;
}else{
stb.append(count);
stb.append(str.charAt(str.length()-1));
count=1;
}
stb.append(count);
stb.append(str.charAt(str.length()-1));
str=stb.toString();
}
}
思路有点不清楚,下次缕一缕,待更。。