多一些Aha Time,发现技术的美妙🍺|

啊原来是这样呀

园龄:8年3个月粉丝:3关注:9

【剑指offer】42.跳台阶扩展问题

总目录:

算法之旅导航目录

 

1.问题描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。

数据范围:1≤n≤20
进阶:空间复杂度 O(1), 时间复杂度 O(1)

 

2.问题分析

 同普通上台阶类似,只不过状态转移方程有所变化,

f(n)=f(n-1)+f(n-2)+....+f(1),

f(n-1)=f(n-2)+f(n-3)+...+f(1),

所以f(n)=2*f(n-1),其中n>1,f(1)=1,

1递归法

2记忆搜索法

3动态规划


3.代码实例

1递归

复制代码
int jumpFloorII(int number ) {
    if (number <= 0) {
        return 0;
    }
    if (number == 1) {
        return 1;
    }

    return 2 * jumpFloorII(number - 1);
}
复制代码

2记忆搜索法

在动态规划的基础上存储中间值而已

3动态规划

复制代码
int jumpFloorII(int number) {
    if (number <= 0) {
        return 0;
    }
    if (number == 1) {
        return 1;
    }

    int pathCount = jumpFloorII(1);
    //依次乘2
    for (int i = 1; i < number; i++)
        pathCount = 2 * pathCount;
    return pathCount;
}
复制代码

 

本文作者:OhOfCourse

本文链接:https://www.cnblogs.com/OhOfCourse/p/16906891.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   啊原来是这样呀  阅读(24)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起