剑指offer 动画图解 | 跳台阶 3分钟刷题

通过刷题剑指offer,可以有效提升面试成功的概率,这是因为技术岗位的面试总是离不开算法题。如果想要在算法题方面表现得好的话,刷题是唯一的捷径。

正所谓:书山有路勤为径

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

解题思路

这类的题型与算术有关系,我们可以这样思考:

我站在第 n 个台阶上,那么我上一步可能在哪个台阶上?

由于每次可以跳1个台阶或2个台阶,因此我们上一步可能来自:

  • 第 n -1 个台阶

  • 第 n -2 个台阶

因为只有在这两个台阶上,我才有可能跳到第 n 个台阶

所以,在第 n 个台阶上,它可能的跳法取决于前两个台阶,因此它的跳法总和为:

第 n - 1 个台阶的跳法 + 第 n - 2 个台阶的跳法

在这里插入图片描述

看到这里,有没有发现这和斐波那契数列很相像?

剑指offer 动画图解 | 斐波那契数列 3种实现方法

算法

解这道题的方法与解斐波那契数列的方法一样。我们有3种常见的实现方法,这些方法的优缺点以及效率都在斐波那契数列那篇文章上做了详细的分析,我们这里就只给出从下自上的循环算法,因为这个算法效率较高。

感兴趣的朋友可以点下方的传送门取阅读斐波那契数列的文章:

剑指offer 动画图解 | 斐波那契数列 3种实现方法

由下自上的循环算法 O(n)

public int JumpFloor(int target) {
    // 定义最开始3个台阶所需步数
    int step0 = 0;
    int step1 = 1;
    int step2 = 2;

    if (target == 0) {
        return step0;
    } else if (target == 1) {
        return step1;
    } else if (target == 2) {
        return step2;
    }

    // 循环计算 f(n) = f(n-1) + f(n-2)
    int result = 0;
    for (int i = 0; i < target - 2; i++) {
        result = step1 + step2;
        step1 = step2;
        step2 = result;
    }

    return result;
}

算法效率

效率:O(n)

从下自上的循环算法会一个一个数往上计算,每个数都只会遍历一遍而已。可参考斐波那契数列由下自上的算法。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值