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

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
【计时开始 - 15分钟】
0-2 分钟:理解题目,识别模式
- 同前,这是一个斐波那契数列变种。
F(n) = F(n-1) + F(n-2),F(1)=1,F(2)=2。
2-7 分钟:设计 C 实现思路
- 算法选择:动态规划,迭代法,O(1) 空间。
- C 工程落地考虑 :
- 函数定义 :通常是
int climbStairs(int n)。 - 整数范围 :C 语言的
int类型在不同平台可能为 16、32 或 64 位。但标准规定int至少能表示 -32767 到 +32767。在 LeetCode 这种在线判题环境中,int通常是 32 位的。F(45) 约 1.8 x 10^9,刚好在 32 位int的范围内(最大值约 2.1 x 10^9),所以int足够。 - 变量:需要两个变量存储前两项的值。
- 循环:从 3 迭代到 n。
- 边界处理 :
n=1,n=2。 - 注释 :使用 C 风格的注释 (
/* ... */或//)。
- 函数定义 :通常是
7-12 分钟:编写 C 代码
#include <stdio.h> // LeetCode 平台通常会包含,或需要时自己添加
// LeetCode 平台通常要求在一个结构体或直接的函数中实现
// 这里假设是直接的函数实现,类似 C++ 的 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)。
* C 语言的 int 类型(通常为 32 位)足够存储 F(45) 的结果,因为 F(45) 约 1.8 x 10^9 < INT_MAX (约 2.1 x 10^9)。
*/
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) { // 使用 ++i 是 C/C++ 的常见写法
// 计算当前阶数的方法数
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
n == 2返回 2。正确。
-
示例 2:n = 3
prev2 = 1,prev1 = 2i = 3:currentWays = 2 + 1 = 3.prev2 = 2,prev1 = 3.- 循环结束,返回
prev1(3)。正确。
-
考虑 n=1:代码已处理。
-
代码风格:
- 函数签名
int climbStairs(int n)标准。 - 变量命名
prev2,prev1,currentWays良好。 - 注释:使用
/** ... */风格进行多行注释,解释了思路、递推关系、边界条件和复杂度。 for (int i = 3; i <= n; ++i):C 语言的 for 循环,++i的使用。
- 函数签名
-
工程落地:代码结构清晰,逻辑正确,注释规范,边界处理到位。
14-15 分钟:最终检查
- 代码逻辑正确,通过示例。
- 符合 C 和 LeetCode 提交要求。
int类型足够。- 包含
#include <stdio.h>(尽管在此题中printf等未用到,但在 C 语言中,标准库的引入是基础)。
【比赛结束】
最终提交(模拟):
#include <stdio.h> // 包含标准输入输出库,虽然在此题中未直接使用,但作为 C 语言基础
/**
* @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)。
* C 语言的 int 类型(通常为 32 位)足够存储 F(45) 的结果,因为 F(45) 约 1.8 x 10^9 < INT_MAX (约 2.1 x 10^9)。
*/
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) { // 使用 ++i 是 C/C++ 的常见写法
// 计算当前阶数的方法数
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;
}
C 语言版快闪赛的特点
- 基础性:C 语言不提供类或命名空间,直接以函数形式实现。
- 手动内存管理(此处不涉及):在更复杂的 C 题目中,内存管理是关键。
- 类型检查 :
int类型的使用。 - 注释风格:经典的 C 风格注释。
- 基础库 :
#include <stdio.h>是 C 语言的起点,即使当前问题不需要printf等。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。