首页 > 编程语言 >每日算法之跳台阶

每日算法之跳台阶

时间:2022-11-17 09:33:08浏览次数:44  
标签:台阶 target jumpFloor int 每日 算法 数组 return

JZ69 跳台阶

描述

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

数据范围:1 \leq n \leq 401≤n≤40
要求:时间复杂度:O(n)O(n) ,空间复杂度: O(1)O(1)

方法1 递归

思路

题目分析,假设f[i]表示在第i个台阶上可能的方法数。
逆向思维。如果我从第n个台阶进行下台阶,下一步有2中可能,一种走到第n-1个台阶,一种是走到第n-2个台阶。
所以f[n] = f[n-1] + f[n-2],那么初始条件了,f[0] = f[1] = 1。 
所以就变成了:f[n] = f[n-1] + f[n-2], 初始值f[0]=1, f[1]=1

代码

if(target == 0 || target == 1) return 1;
        return jumpFloor(target - 1) + jumpFloor(target - 2);

方法2 递归改进

思路

f(2)计算了两次,f(1)计算了3次,f(0)计算了2次。可以采用一个数组存储已经被计算过的值
此方法编译不通过,空间复杂度过高

代码

int[] f = new int[50];
        if (target <= 1) return 1;
        if (f[target] != 0) return f[target];
        return f[target] = (jumpFloor(target - 1) + jumpFloor(target - 2));

方法3 动态规划

思路

思路:既然与斐波那契数列相同,我们就把它放入数组中来解决。

具体做法:
  step 1:创建一个长度为n+1的数组,因为只有n+1才能有下标第n项,我们用它记录前n项斐波那契数列。
  step 2:根据公式,初始化第0项和第1项。
  step 3:遍历数组,依照公式某一项等于前两项之和,将数组后续元素补齐,即可得到fib[n]fib[n]fib[n]

代码

package esay.JZ69跳台阶;

public class Solution {
    public static int jumpFloor(int target) {
        //方法1
        /*if(target == 0 || target == 1) return 1;
        return jumpFloor(target - 1) + jumpFloor(target - 2);*/

        //方法2
        /*int[] f = new int[50];
        if (target <= 1) return 1;
        if (f[target] != 0) return f[target];
        return f[target] = (jumpFloor(target - 1) + jumpFloor(target - 2));*/

        //方法3
        if (target <= 1)
            return 1;
        int[] temp = new int[target + 1];
        //初始化
        temp[0] = 1;
        temp[1] = 1;
        //遍历相加
        for (int i = 2; i <= target; i++)
            temp[i] = temp[i - 1] + temp[i - 2];
        return temp[target];

    }

    public static void main(String[] args) {
        System.out.println(jumpFloor(37));
    }

}

标签:台阶,target,jumpFloor,int,每日,算法,数组,return
From: https://www.cnblogs.com/loongnuts/p/16898339.html

相关文章

  • 中国裁决文书网,js算法分析
    author:sky_dadate:2022-11-171-1引入基本算法库CryptoJSvarCryptoJS=CryptoJS||function(y,h){varj={},g=j.lib={},f=functi......
  • 前端常见算法
    C:\Users\Administrator\Desktop\手写\01_instanceOf.jsfunctioninstance_of(target,origin){lettargetP=target.__proto__;letoriginP=origin.prototype;......
  • 二分搜索算法
    目录介绍基本的二分搜索思路代码实现:查找左边界的二分搜索思路代码实现:查找右边界的二分搜索思路代码实现:介绍二分查找适用于已经排序的序列,通过对搜索区间折半的方式查......
  • 代码随想录算法训练营Day01|704. 二分查找、27. 移除元素
    代码随想录算法训练营Day01|704.二分查找、27.移除元素704.二分查找题目链接:704.二分查找首先注意题干的描述:题干描述说明了元素是升序排列的,否则需要调用sort进行......
  • 3 、Vue 【进阶】- diff 算法(2), 【包含完整 patchNode】
    Vue【进阶】-diff算法(2),【包含完整patchNode】前言上一讲https://www.cnblogs.com/caijinghong/p/16879388.htmldiff算法讲了:虚拟dom文件位置seter触发后的......
  • 实验四:神经网络算法实验
    【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现了......
  • 基于协调过滤算法的SSM微折扣服饰商城的设计与实现
    项目介绍基于协同过滤算法实现商品推荐后端框架:SSM(Spring+SpringMVC+Mybatis)微折扣服饰商城开发环境:eclipseMySQL57Tomcat8jdk1.8Windows10前端框架:LayUI系统功能......
  • 蓝桥杯_每日一题Day7
    13届蓝桥杯1024PC04:给定一个正整数N,将1到N之间(包含1和N)的正整数按偶数递增、奇数递减的顺序排列输出。(先输出偶数,再输出奇数)例如:给定正整数为5,1到5之间偶数有2、4,按偶数递......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    目录两道题704.二分查找27.移除元素省流两道题704.二分查找  1、数组算是最简单,也最不抽象的数据结构了。二分法,我也在学习路上听过不少次,所以是实际实现也很快,没有......
  • 蓝桥杯_每日一题Day6
    13届蓝桥杯1024PC03:输入:一个只包含大小写字母的字符串输出:将字符串全部变为大写字母,然后逆序(反向)输出样例输入:aCb样例输出:BCA1.大写upper()返回:'''大写、字符串排......