java 算法 LeetCode 编号 70 - 爬楼梯

目录

[【计时开始 - 15分钟】](#【计时开始 - 15分钟】)

[7-12 分钟:编写 Java 代码](#7-12 分钟:编写 Java 代码)

[12-14 分钟:简单测试与代码审查](#12-14 分钟:简单测试与代码审查)

[14-15 分钟:最终检查](#14-15 分钟:最终检查)

【比赛结束】

[Java 版快闪赛的特点](#Java 版快闪赛的特点)


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

【计时开始 - 15分钟】

0-2 分钟:理解题目,识别模式

  • 同前,斐波那契数列变种。
  • F(n) = F(n-1) + F(n-2)F(1)=1, F(2)=2

2-7 分钟:设计 Java 实现思路

  • 算法选择:动态规划,迭代法,O(1) 空间。
  • Java 工程落地考虑
    • 类和方法 :LeetCode Java 题目通常要求在 Solution 类中实现 public int climbStairs(int n) 方法。
    • 整数范围n <= 45int 在 Java 中是 32 位,范围足够。
    • 变量:需要两个变量存储前两项的值。
    • 循环:从 3 迭代到 n。
    • 边界处理n=1, n=2
    • 注释 :使用 Javadoc 风格 (/** ... */)。

7-12 分钟:编写 Java 代码

class Solution {

/**

* @brief 计算爬 n 阶楼梯的总方法数。

*

* @param n 楼梯总阶数 (1 <= n <= 45)。

* @return 到达楼顶的不同方法数。

*

* @details

* 思路:该问题是经典的斐波那契数列变种。

* 到达第 i 阶的方法数,等于到达第 i-1 阶(再走1步)与到达第 i-2 阶(再走2步)的方法数之和。

* 令 F(i) 为到达第 i 阶的方法数。

* 递推关系:F(i) = F(i-1) + F(i-2)。

*

* 边界条件:

* F(1) = 1 (只可能走 1 步)

* F(2) = 2 (可能走 1+1 或 2)

*

* 采用动态规划(迭代法)实现,空间复杂度为 O(1),时间复杂度为 O(n)。

* Java 的 int 类型足够存储 F(45) 的结果,因为 F(45) 约 1.8 x 10^9 < Integer.MAX_VALUE (约 2.1 x 10^9)。

*/

public int climbStairs(int n) {

// 处理基本边界情况

if (n == 1) {

return 1;

}

if (n == 2) {

return 2;

}

// 使用 O(1) 空间复杂度的动态规划

// prev2 存储 F(i-2) 的值,prev1 存储 F(i-1) 的值

int prev2 = 1; // 对应 F(1)

int prev1 = 2; // 对应 F(2)

// 从第 3 阶开始迭代计算,直到第 n 阶

// 循环执行 n - 2 次

for (int i = 3; i <= n; i++) {

// 计算当前阶数的方法数

int currentWays = prev1 + prev2;

// 更新 prev2 和 prev1,为下一轮迭代做准备

prev2 = prev1; // 原来的 F(i-1) 变为下一轮的 F(i-2)

prev1 = currentWays; // 新计算出的 F(i) 变为下一轮的 F(i-1)

}

// 循环结束后,prev1 中存储的就是 F(n) 的值

return prev1;

}

}

12-14 分钟:简单测试与代码审查

  • 示例 1:n = 2

    • 直接返回 2。正确。
  • 示例 2:n = 3

    • prev2 = 1, prev1 = 2
    • i = 3: currentWays = 2 + 1 = 3. prev2 = 2, prev1 = 3.
    • 循环结束,返回 prev1 (3)。正确。
  • 考虑 n=1:代码已处理。

  • 代码风格

    • class Solution { public int climbStairs(int n) { ... } } 符合 Java 和 LeetCode 模板。
    • 变量命名 prev2, prev1, currentWays 良好。
    • 注释:使用 Javadoc 风格 (/** ... */),包含 @brief, @param, @return, @details,这是 Java 开发的常用规范。
    • for (int i = 3; i <= n; i++):Java 风格的 for 循环。
  • 工程落地:代码结构清晰,逻辑正确,注释规范,边界处理到位。

14-15 分钟:最终检查

  • 代码逻辑正确,通过示例。
  • 符合 Java 和 LeetCode 提交要求。
  • 整数 int 足够。

【比赛结束】

最终提交(模拟):

class Solution {

/**

* @brief 计算爬 n 阶楼梯的总方法数。

*

* @param n 楼梯总阶数 (1 <= n <= 45)。

* @return 到达楼顶的不同方法数。

*

* @details

* 思路:该问题是经典的斐波那契数列变种。

* 到达第 i 阶的方法数,等于到达第 i-1 阶(再走1步)与到达第 i-2 阶(再走2步)的方法数之和。

* 令 F(i) 为到达第 i 阶的方法数。

* 递推关系:F(i) = F(i-1) + F(i-2)。

*

* 边界条件:

* F(1) = 1 (只可能走 1 步)

* F(2) = 2 (可能走 1+1 或 2)

*

* 采用动态规划(迭代法)实现,空间复杂度为 O(1),时间复杂度为 O(n)。

* Java 的 int 类型足够存储 F(45) 的结果,因为 F(45) 约 1.8 x 10^9 < Integer.MAX_VALUE (约 2.1 x 10^9)。

*/

public int climbStairs(int n) {

// 处理基本边界情况

if (n == 1) {

return 1;

}

if (n == 2) {

return 2;

}

// 使用 O(1) 空间复杂度的动态规划

// prev2 存储 F(i-2) 的值,prev1 存储 F(i-1) 的值

int prev2 = 1; // 对应 F(1)

int prev1 = 2; // 对应 F(2)

// 从第 3 阶开始迭代计算,直到第 n 阶

// 循环执行 n - 2 次

for (int i = 3; i <= n; i++) {

// 计算当前阶数的方法数

int currentWays = prev1 + prev2;

// 更新 prev2 和 prev1,为下一轮迭代做准备

prev2 = prev1; // 原来的 F(i-1) 变为下一轮的 F(i-2)

prev1 = currentWays; // 新计算出的 F(i) 变为下一轮的 F(i-1)

}

// 循环结束后,prev1 中存储的就是 F(n) 的值

return prev1;

}

}

Java 版快闪赛的特点

  • 语言规范 :严格遵循 Java 的类、方法、访问修饰符 (public) 的规范。
  • Javadoc 注释:使用了 Java 的标准文档注释,这对于大型 Java 项目的维护和 API 文档生成非常重要。
  • 变量命名prev1, prev2, currentWays 提供了良好的可读性。
  • 类型安全 :确认 int 类型足够。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
就叫_这个吧15 分钟前
Java递归方法实现面包屑导航
java·开发语言
小O的算法实验室26 分钟前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
fīɡЙtīиɡ ℡30 分钟前
AI 应用系统设计
java·开发语言·人工智能
城管不管39 分钟前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅39 分钟前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒1 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
Tbisnic1 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
最强小杰2 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
Brilliantwxx2 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
今天AI了吗2 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习