目录
[【计时开始 - 15分钟】](#【计时开始 - 15分钟】)
[7-12 分钟:编写 PHP 代码](#7-12 分钟:编写 PHP 代码)
[12-14 分钟:简单测试与代码审查](#12-14 分钟:简单测试与代码审查)
[14-15 分钟:最终检查](#14-15 分钟:最终检查)
[PHP 版快闪赛的特点](#PHP 版快闪赛的特点)

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
【计时开始 - 15分钟】
0-2 分钟:理解题目,识别模式
- 同前,斐波那契数列变种。
F(n) = F(n-1) + F(n-2),F(1)=1,F(2)=2。
2-7 分钟:设计 PHP 实现思路
- 算法选择:动态规划,迭代法,O(1) 空间。
- PHP 工程落地考虑 :
- 函数定义 :通常是
function climbStairs(int $n): int,类型提示是 PHP 7+ 的特性,能增强代码健壮性。 - 整数范围 :PHP 的
int类型也通常是 32 位或 64 位,足够处理 F(45)。 - 变量:需要两个变量存储前两项的值。
- 循环:从 3 迭代到 n。
- 边界处理 :
n=1,n=2。 - 注释 :使用 PHPDoc 风格 (
/** ... */)。
- 函数定义 :通常是
7-12 分钟:编写 PHP 代码
<?php
class Solution {
/**
* @param int $n 楼梯总阶数 (1 <= n <= 45)。
* @return int 到达楼顶的不同方法数。
*
* @description
* 思路:该问题是一个经典的斐波那契数列变种。
* 到达第 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)。
* PHP 的 int 类型足以处理 F(45) 的结果。
*/
public function climbStairs(int $n): int {
// 处理基本边界情况
if ($n === 1) {
return 1;
}
if ($n === 2) {
return 2;
}
// 使用 O(1) 空间复杂度的动态规划
// prev2 存储 F(i-2) 的值, prev1 存储 F(i-1) 的值
$prev2 = 1; // 对应 F(1)
$prev1 = 2; // 对应 F(2)
// 从第 3 阶开始迭代计算,直到第 n 阶
// 循环执行 n - 2 次
for (i = 3; i <= n; i++) {
// 计算当前阶数的方法数
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
$n === 1or$n === 2检查。$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 function climbStairs(int $n): int { ... } }符合 PHP 和 LeetCode 模板。- 变量命名
$prev2,$prev1,$currentWays良好,PHP 变量前缀$是必须的。 - 注释:使用 PHPDoc 风格 (
/** ... */),包含@param,@return,@description,这是 PHP 的标准实践。 - 类型提示
int和返回类型: int增强了代码的可读性和健壮性。 ===:使用严格相等比较。
-
工程落地:代码结构清晰,逻辑正确,注释规范,边界处理到位。
14-15 分钟:最终检查
- 代码逻辑正确,通过示例。
- 符合 PHP 和 LeetCode 提交要求。
int类型足够。
【比赛结束】
最终提交(模拟):
<?php
class Solution {
/**
* @param int $n 楼梯总阶数 (1 <= n <= 45)。
* @return int 到达楼顶的不同方法数。
*
* @description
* 思路:该问题是一个经典的斐波那契数列变种。
* 到达第 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)。
* PHP 的 int 类型足以处理 F(45) 的结果。
*/
public function climbStairs(int $n): int {
// 处理基本边界情况
if ($n === 1) {
return 1;
}
if ($n === 2) {
return 2;
}
// 使用 O(1) 空间复杂度的动态规划
// prev2 存储 F(i-2) 的值, prev1 存储 F(i-1) 的值
$prev2 = 1; // 对应 F(1)
$prev1 = 2; // 对应 F(2)
// 从第 3 阶开始迭代计算,直到第 n 阶
// 循环执行 n - 2 次
for (i = 3; i <= n; i++) {
// 计算当前阶数的方法数
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;
}
}
PHP 版快闪赛的特点
- 类型提示 :
int $n和: int增强了代码的清晰度和可维护性。 - 变量前缀
$:PHP 变量的标志性特征。 - PHPDoc 注释:与 JSDoc 和 Javadoc 类似,是 PHP 项目的标准文档格式。
- 严格相等
===:避免类型转换问题。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。