leetcode-70 爬楼梯(java实现)

news2024/11/18 15:48:19

爬楼梯

    • 题目
    • 分析1 递归写法
    • 动态规划解法

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

分析1 递归写法

如果要爬上第n阶,要么是从第n-1上面再爬1阶上去的,要么是从n-2上面再爬2阶上去的,那么我们就可以想到 f(n) = f(n-1)+f(n-2),这样也就很容易利用递归写出来

public static int climbStairs(int n) {

        // 这个貌似也是要用到递归,把之前的n-1个台阶的步骤全部加起来就可以了
        if(n == 1){
            return 1;
        }else if(n == 2){
            return 2;
        }else{
            return climbStairs(n-1)+climbStairs(n-2);
        }
    }

递归树的高度为n,每个节点有2个子节点,所以总共需要计算的节点数为2的n次方。因此,时间复杂度为O(2^n)
空间复杂度也比较高,因为每个递归函数调用都会创建一个新的栈帧,占用一定的内存。递归树的深度为n,所以空间复杂度为O(n)。

提交后,leetcode 平台提示运行失败,超时了
在这里插入图片描述
本地是能正常输出的,写法和思路是没有问题的,不过确实慢
在这里插入图片描述

动态规划解法

假设到达第i个楼梯的不同方法数为dp[i],则有以下递推式:

dp[i] = dp[i-1] + dp[i-2]

因为每次只能爬1个或2个楼梯,所以到达第i个楼梯的方法数等于到达第i-1个楼梯的方法数加上到达第i-2个楼梯的方法数。

初始状态为dp[1]=1和dp[2]=2,因为到达第1个楼梯只有1种方法,到达第2个楼梯有2种方法(一次跨2个或者分两次跨1个)。

最终要求的答案是到达第n个楼梯的方法数,即dp[n]。

public int climbStairs(int n) {
    if (n == 1) return 1;
    // 当需要计算到 dp[n] 时,数组下标是从 0 到 n 的,需要定义一个长度为 n+1 的数组才能存储计算结果。如果定义一个长度为 n 的数组,那么在计算 dp[n] 的时候,就会发生数组越界的错误
    int[] dp = new int[n+1];
    dp[1] = 1;
    dp[2] = 2;
    for (int i = 3; i <= n; i++) {
        dp[i] = dp[i-1] + dp[i-2];
    }
    return dp[n];
}

时间复杂度为O(n),空间复杂度为O(n)。

提交后的结果成功
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/398302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Postman简介及接口测试流程(小菜鸟攻略)

目录 前言 一、常见接口 二、前端和后端 三、什么是接口测试 四、接口组成 1、接口说明 2、调用url 3、请求方法&#xff08;get\post&#xff09; 4、请求参数、参数类型、请求参数说明 5、返回参数说明 五、为什么要做接口测试 本章主要介绍如何使用postman做接口…

电脑蓝屏怎么办?这5个技巧你必须学会

案例&#xff1a;电脑蓝屏是什么原因&#xff1f;怎么样可以解决&#xff1f; “救命&#xff01;&#xff01;&#xff01;电脑是怎么了&#xff1f;开机直接蓝屏&#xff0c;是哪里坏了吗&#xff1f;前几天电脑还是好的&#xff0c;今早一打开就是蓝屏&#xff0c;可能是之…

继承、多继承

继承 文章目录继承继承的概念继承的定义继承方式和访问限定符继承基类成员访问方式的变化基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数构造函数拷贝构造赋值重载析构函数继承和友元继承和静态成员多继承&#xff0c;菱形继承和菱形虚拟继承单继承&#xff1a;一…

【算法】六大排序 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序

本章的所有代码可以访问这里 排序 一 一、排序的概念及其运用1.1排序的概念1.2 常见的排序算法二、常见排序算法的实现1、直接插入排序2、希尔排序3、选择排序4、堆排序5、冒泡排序6、快速排序6.1霍尔法6.2挖坑法6.3前后指针法7、快速排序非递归一、排序的概念及其运用 1.1排序…

Mysql中的 IFNULL 函数的详解

目录 一、概念 二、语法 三、Demo 举例说明 创建表 加入数据 运行结果 3.1举例一 3.2举例二 3.3举例三 3.4举例四 注意事项 一、概念 在mysql中IFNULL() 函数用于判断第一个表达式是否为 NULL&#xff0c;如果第一个值不为NULL就执行第一个值。第一个值为 NULL 则返…

华为OD机试题,用 Java 解【求最大数字】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

【模板进阶】

目录 1. 非类型模板参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 3 模板分离编译 3.1 什么是分离编译 3.2 模板的分离编译 4. 模板总结 有需要的老哥可以先看看模板的介绍&#xff1a;http://t.csdn.cn/2TkUYhttp://t.csdn.cn/2TkUY 1. …

聊点不一样的|Be a Serendipper:Woman VS Man

很喜欢这样一句话&#xff1a;Be a serendipper&#xff0c;and find your own serendipity!可以理解为&#xff1a;做一个善于发现美好事物的人&#xff0c;找到属于你自己的那些美好。每个人的生活中都有 Serendipity&#xff0c;有时能被我们一眼看到&#xff0c;有时又会藏…

七段码 杨辉三角

题目&#xff1a; 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示&#xff0c;数码管中一共有 77 段可以发光的二 极管&#xff0c;分别标记为 a,b,c,d,e,f,g。 小蓝要选择一部分二极管&#xff08;至少要有一个&#xff09;发光来表达字符。在…

AI已到,普通人的机会在哪里?

“普通人赚到钱很难 但是被骗到钱很容易”。每当火起来一个行业&#xff08;或者仅是一个概念&#xff09;&#xff0c;都会有人来问&#xff1a;现在去做点什么&#xff0c;能够踩上风口&#xff1f;普通人的赚钱机会在哪&#xff1f;怎么做能够暴富&#xff1f;让我们先来看看…

【卷积神经网络】中间层网络的参数归一化方法 | BN / LN / IN / GN

文章目录一、为什么神经网络需要归一化二、常用的归一化方法三、Batch Normalization四、Layer Normalization五、Instance Normalization六、Group Normalization本文主要介绍神经网络中常用的归一化方法&#xff0c;主要是在神经网络内部对中间层的输入进行归一化&#xff0c…

【论文阅读】Robust Multi-Instance Learning with Stable Instances

1、摘要与引言 以往的MIL算法遵循i.i.d假设&#xff1a;训练样本与测试样本都分别来自于同一分布中&#xff0c;而这一假设往往与现实应用中有所出入。研究人员通过计算训练样本与测试样本之间的密度比对训练样本进行加权&#xff0c;以解决分布变化带来的问题。 分布的变化发…

SpringBoot + Druid + Mybatis-Plus + Mysql 实现数据库监控

1. 简介 在日常的WEB开发中都会使用数据库存储信息。大多数情况我们只是使用了数据库&#xff0c;而无法感知业务对数据库的压力&#xff0c;从而无法有目的的提升性能。在使用数据库时&#xff0c;都会选用常见的C3P0、DBCP、Hikari、Druid连接池&#xff0c;虽然SpringBoot官…

JavaScript中的数据类型以及存储上的差别?

前言 在JavaScript中&#xff0c;我们可以分成两种类型&#xff1a; 基本类型复杂类型 两种类型的区别是&#xff1a;存储位置不同 一、基本类型 基本类型主要为以下6种&#xff1a; NumberStringBooleanUndefinednullsymbol Number 数值最常见的整数类型格式则为十进制…

最强分布式锁工具:Redisson

1 Redisson概述1.1 什么是Redisson&#xff1f;Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, Sorted…

学python的第六天---字符串

一、只出现一次的字符其他&#xff1a;round(XXX,1)忽略大小写比较字符串大小字符串几个可以使用的函数二、去掉多余的空格写法一&#xff1a;写法二&#xff1a;三、信息加密写法一&#xff1a;写法二:写法三&#xff1a;自己的写法四、单词替换五、倒排单词写法一&#xff1a…

面试官:什么是双亲委派模型?如何打破它?

本文已经收录进 JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。) 参加过校招面试的同学,应该对这个问题不陌生。一般提问 JVM 知识点的时候,就会顺带问你双亲委派模型(别扭的翻译。。。)。 就算是不准备面试,学习双亲委派模型对于我…

if-else if与switch的练习1:输入两个数,输出两个数的加减乘除的值

1.if-else if的练习 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…

所有科研人警惕,掠夺型期刊和劫持型期刊的区别,千万别投错了

当今&#xff0c;新形式的学术出版物——例如数字式或开源式的学术期刊日益普及&#xff0c;热门期刊的数量逐年增长【1】。 人们获取学术出版物也越来越容易&#xff0c;使得更多的科研人员&#xff08;特别是在低收入国家&#xff09;能够及时了解各自研究领域的最新发展态势…

ubuntu20.04搭建detectron2环境

Ubuntu22.04安装Cuda11.3 Linux下驱动安装 # 以下命令按顺序执行 sudo apt update && sudo apt upgrade -y # or sudo apt update # 查看显卡信息 ubuntu-drivers devices sudo ubuntu-drivers autoinstall # or sudo apt install nvidia-driver-510 reboot nvidia-s…