题解 | #跳台阶#

跳台阶

http://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4

首先可以看最基础的情况,一级台阶的时候只有一种跳法,两级台阶的时候有两种,11,2两种;

  • 3级台阶,3级可以由1级台阶再跳2级来,也可以由2级再跳1级来, 假设f(x)代表x级台阶的跳动方法数,则f(3) = f(2) + f(1)
  • 4级台阶,3级可以由2级台阶再跳2级来,也可以由3级再跳1级来, 假设f(x)代表x级台阶的跳动方法数,则f(4) = f(3) + f(2)

以此类推,f(x) = f(x - 1) + f(x - 2), x >= 3......

可以设一个长度为n + 1 的数组,数组dp[i] 代表跳动第i级有几种跳法,这样做空间复杂度为o(n),我们可以发现求当前数值只与前两个数值有关,与前面的所有都无关了,我们可以定义两个变量维护这两个值,在循环中不断改变值就行了。

代码如下:

public class Solution {
    public int jumpFloor(int target) {
       // 一只青蛙跳台阶,一次可以跳一级,也可以跳两级
        // 上n级台阶有几种跳法
        if(target <= 2) return target;
        int pre1 = 1;
        int pre2 = 2;
        int cur = 0;
        for(int i = 3; i <= target; i++){
            cur = pre1 + pre2;
            pre1 = pre2;
            pre2 = cur;
        }
        return cur;
    }
}
全部评论
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-20 15:52

相关推荐

Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务