当前位置: 首页 > news >正文

Leetcode 03 java

爬楼梯算法

现在只看明白动态规划,也没有很难哟!!

题目
70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
java题解
class Solution {public int climbStairs(int n) {int p = 0, q = 0, r = 1;for (int i = 1; i <= n; ++i) {p = q; q = r; r = p + q;}return r;}
}

这个爬楼梯算法实际上是一个经典的动态规划问题,也可以看作是斐波那契数列的变种。让我来详细解释一下:

问题理解

假设你正在爬楼梯,需要n阶才能到达楼顶。每次你可以爬 1 或 2 个台阶。问有多少种不同的方法可以爬到楼顶?

例如:

  • n=2时,有两种方法:1+1 或直接 2 步
  • n=3时,有三种方法:1+1+1、1+2、2+1
  • n=4时,有五种方法:1+1+1+1、1+1+2、1+2+1、2+1+1、2+2

动态规划思路

动态规划的核心是将大问题分解为小问题,并存储小问题的解避免重复计算。

对于爬楼梯问题,关键观察点是:

  • 到达第i阶楼梯的方法数 = 到达第i-1阶的方法数(再爬 1 步) + 到达第i-2阶的方法数(再爬 2 步)
  • 即状态转移方程:dp[i] = dp[i-1] + dp[i-2]

代码解释

你提供的代码正是基于这个思路实现的,只不过使用了滚动数组优化空间复杂度:

java

public int climbStairs(int n) {int p = 0, q = 0, r = 1;for (int i = 1; i <= n; ++i) {p = q;     // p 记录 dp[i-2] 的值q = r;     // q 记录 dp[i-1] 的值r = p + q; // r 计算当前 dp[i] = dp[i-1] + dp[i-2]}return r;
}

执行过程示例

n=3为例:

  1. 初始状态:p=0q=0r=1
  2. 循环开始:
    • i=1p=0q=1r=p+q=1 → 到达第 1 阶有 1 种方法
    • i=2p=1q=1r=p+q=2 → 到达第 2 阶有 2 种方法
    • i=3p=1q=2r=p+q=3 → 到达第 3 阶有 3 种方法
  3. 返回结果:r=3

复杂度分析

  • 时间复杂度:O (n),只需遍历一次
  • 空间复杂度:O (1),只使用了三个变量

这种优化方法避免了创建长度为n的数组,在空间效率上更高。本质上,这个问题和斐波那契数列的计算是一样的,只是起始条件略有不同(斐波那契通常从 0 和 1 开始,而爬楼梯这里从 1 和 1 开始)。

http://www.dtcms.com/a/285075.html

相关文章:

  • 设备管理系统横评:预警功能、移动端体验、性价比谁更强?
  • PyTorch图像预处理全解析(transforms)
  • SAP-ABAP:SAP的‘cl_http_utility=>escape_url‘对URL进行安全编码方法详解
  • 6 基于STM32单片机的智能家居系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)
  • 如何从 iPhone 向Mac使用 AirDrop 传输文件
  • 企业网络运维进入 “AI 托管” 时代:智能分析 + 自动决策,让云、网、端一眼看穿
  • 关于用git上传远程库的一些常见命令使用和常见问题:
  • Redis学习-02安装Redis(Ubuntu版本)、开启远程连接
  • ComfyUI 中RAM内存、VRAM显存、GPU 的占用和原理
  • 基于深度学习的图像识别:从零构建卷积神经网络(CNN)
  • 面对微软AD的安全隐患,宁盾身份域管如何设计安全性
  • Python调用父类方法的三种方式详解 | Python面向对象编程教程
  • 【DOCKER】-5 镜像仓库与容器编排
  • 云服务器如何设置防火墙和安全组规则?
  • Java EE进阶3:SpringBoot 快速上手
  • 【Linux】Makefile(二)-书写规则
  • 【原创】【图像算法】高精密电子仪器组装异常检测
  • 力扣119:杨辉三角Ⅱ
  • Cursor出现This model provider doesn’t serve your region解决方案
  • 【调度算法】
  • javaScript中数组常用的函数方法
  • 洛谷 P1601 A+B Problem(高精)
  • 重构比特币在 Sui DeFi 中的角色
  • Redis中什么是看门狗机制
  • 解决leetcode第3614题用特殊操作处理字符串II
  • 魔术公式轮胎simulink模型建立及参数拟合
  • 实现atm提款简易代码
  • ​​孤儿进程:当父进程先离开时会发生什么?
  • LeetCode|Day17|242. 有效的字母异位词|Python刷题笔记
  • 云服务器的数据如何备份和恢复?