剑指Offer---Java实现跳台阶和变态跳台阶

跳台阶:

题目:

 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法。

方法:

多写出几个可以找到规律和斐波那契数列差不多的规律

n        方法数
1            1
2            2
3            3
4            5
...           ...
n            f(n-1)+f(n-2)
用递归可实现
代码:
public int solution(int target)  
{  
    if(target == 1) { 
        return 1;  
     }  
    else if(target == 2)  {  
        return 2;
      }else{
        return solution(target - 1) + 
       solution(target - 2);  
      }
}

变态跳台阶

题目: 

一个台阶总共有n级,如果一次可以跳1级,也可以跳2级……也可以跳n级 求总共有多少总跳法。

方法:

想一下,不管有多少阶楼梯,都可以一下跳完,这种情况我们假定为F(0)=1。

假设有n阶,我们可以将楼梯分段来想,从递归的角度考虑,可以跳完n阶的情况分别是:

n=1时 一次跳完只有一种情况F(1)=1

n=2时 一次跳两步跳完一次跳一步有两种情况飞F(2)=F(0)+F(1)

而当n=3时 第一次跳1步,还剩下2步,则还有F(3-1)=F(2)

               第一次跳2步,还剩下1步,则还有F(3-2)=F(1)

               第一次跳3步,则只有这一种跳法即F(3-3)=F(0)

依次类推 可以得出: 

F(n) = F(0)+F(1)+F(2)+..........+F(n-1)

n         方法数

0            1

1            1

2            2

3            4        

...            ...

n           F(0)+F(1)+F(2)+..........+F(n-1)

代码:

public class Solution {
    public int JumpFloorII(int target) {
        if(target == 0||target == 1)
            return 1;
        if(target == 2)
            return 2;
        int sum=0;
        for(int i=0;i<target;i++){
          sum += JumpFloorII(target);
        }
          return sum;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值