leetcode-easy-38 Count and Say

结合别人的总结加上自己的理解,如有不对或者理解错误之处请指出;

 

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();
   }
}

 

 

 

思路有点不清楚,下次缕一缕,待更。。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值