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

C# 算法 LeetCode 编号 70 - 爬楼梯

目录

C# 实现的思考与执行

【计时开始 - 15分钟】

7-12 分钟:编写 C# 代码

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

【比赛结束】

C# 版快闪赛的工程落地提升


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

C# 实现的思考与执行

  • 理解与模式识别:与 Python 版本相同。题目是斐波那契数列的变种。F(n) = F(n-1) + F(n-2)F(1)=1,F(2)=2
  • 算法选择:动态规划(迭代,O(1) 空间复杂度)是最佳选择。
  • C# 工程落地考虑
    • 命名空间和类:LeetCode C# 题目通常要求在Solution类下实现。
    • 方法签名public int ClimbStairs(int n)
    • 整数溢出:题目提示n <= 45。斐波那契数列增长很快。F(45) 约为 1.8 x 10^9,在int的范围内(最大值约 2.1 x 10^9)。所以int类型足够,不需要long
    • 可读性:变量命名、注释。

【计时开始 - 15分钟】

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

  • 同 Python 版本:斐波那契数列,F(n) = F(n-1) + F(n-2)F(1)=1,F(2)=2

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

  • 使用迭代法(动态规划)。
  • 需要变量存储 F(i-2) 和 F(i-1) 的值。
  • 初始化a(代表 F(i-2)) 和b(代表 F(i-1))。
  • 循环计算 F(i) 直到 F(n)。
  • 处理n=1n=2的边界情况。

7-12 分钟:编写 C# 代码

// 假设在一个名为 Solution 的类中实现
public class Solution
{
/// <summary>
/// 计算爬 n 阶楼梯的总方法数。
/// 每次可爬 1 或 2 阶。
/// </summary>
/// <param name="n">楼梯总阶数。</param>
/// <returns>到达楼顶的不同方法数。</returns>
public int ClimbStairs(int n)
{
// --- 思路:动态规划,斐波那契数列变种 ---
// F(i) = F(i-1) + F(i-2)
// 边界条件:F(1) = 1, F(2) = 2

// 处理基本边界情况
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}

// 使用 O(1) 空间复杂度的动态规划
// prev1 存储 F(i-1) 的值,prev2 存储 F(i-2) 的值
int prev2 = 1; // 对应 F(1)
int prev1 = 2; // 对应 F(2)

// 从第 3 阶开始迭代计算
// 循环从 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:代码已处理。
  • 代码风格
    • 类名Solution,方法名ClimbStairs,参数n,返回类型int,符合 C# 和 LeetCode 规范。
    • 变量命名prev2,prev1,currentWaysa, b更具描述性,提升了可读性。
    • /// <summary>...</summary>XML 文档注释,符合 C# 最佳实践,清晰说明了方法功能、参数和返回值。
    • 思路注释也已加入。
  • 工程落地:边界条件处理清晰,变量命名有提升,注释规范。

14-15 分钟:最终检查

  • 代码逻辑正确,通过示例。
  • 符合 C# 和 LeetCode 提交要求。
  • 注释和命名规范比 Python 版有所提升,更符合 C# 工程实践。
  • 整数范围int足够。

【比赛结束】

最终提交(模拟):

using System;

public class Solution
{
/// <summary>
/// 计算爬 n 阶楼梯的总方法数。
/// 每次可爬 1 或 2 阶。
/// </summary>
/// <param name="n">楼梯总阶数。</param>
/// <returns>到达楼顶的不同方法数。</returns>
/// <remarks>
/// 思路:该问题是典型的斐波那契数列变种。
/// 到达第 `i` 阶的方法数 F(i) 等于到达第 `i-1` 阶(再爬1步)与到达第 `i-2` 阶(再爬2步)的方法数之和。
/// 递推关系:F(i) = F(i-1) + F(i-2)。
/// 基本边界条件:
/// F(1) = 1 (只可能爬 1 步)
/// F(2) = 2 (可能爬 1+1 或 2)
///
/// 采用动态规划(迭代法)实现,空间复杂度为 O(1),时间复杂度为 O(n)。
/// </remarks>
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;
}
}

C# 版快闪赛的工程落地提升

  • 更规范的注释:使用了 XML 文档注释 (/// <summary>),这是 C# 开发的业界标准,能生成 API 文档,对 IDE 提示也很有帮助。
  • 更具描述性的变量名prev1,prev2,currentWaysa,b等更清晰地传达了变量的含义,即使没有注释,也能大致理解。
  • 添加using System;(虽然在这个例子中不是必需的,但通常是 C# 文件开头的一部分)。
  • 更详细的思路说明:在remarks标签中,进一步展开了递推关系、边界条件和算法复杂度。

总体而言,15 分钟内用 C# 完成,不仅解决了问题,还体现了良好的工程实践和代码风格。

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

http://www.jsqmd.com/news/884383/

相关文章:

  • 2026苏州钻石回收避坑指南!6家本地正规回收机构全面测评 - 薛定谔的梨花猫
  • 白嫖Codex!一行代码不花接入国产DeepSeek-v4-pro,从此告别ChatGPT月费
  • 纳米片与CFET热挑战解析及优化策略
  • Swap 基本概念
  • 衡阳回收报废汽车2026年补贴多少? - 资讯纵览
  • HKMG工艺的“阿喀琉斯之踵”:聊聊那个无法移除的SiON界面层与未来0.3nm的挑战
  • 从零开始构建个人知识库:kepano-obsidian笔记模板完整指南
  • 无锡黄金变现优选榜单,口碑靠谱渠道实测推荐! - 奢侈品回收测评
  • 还在手动触发Lindy子任务?这6个隐藏API+3个低代码集成技巧,今天就能上线全自动流水线
  • Vue2-Verify:Vue.js验证码组件的终极完整指南
  • Claude Code 项目全生命周期管理实战指南
  • 2026年贵州医学卫生类中专大专升学怎么选?如何避坑、直达官方咨询渠道? - 优质企业观察收录
  • 面试官问LinkedBlockingQueue和ArrayBlockingQueue区别?别只答有界无界了,这3个实战坑才是重点
  • 从配置到运行时:Forge Admin 的动态 API 配置管理是怎么做的
  • 硕博冲刺期必看:文献阅读软件哪个好用?Scholaread多篇对比阅读实测 - nut-king
  • 从Stable Diffusion到DiT:为什么说Transformer是扩散模型的下一站?
  • 国内实力吊钩式抛丸机厂家排行:实测数据对比 - 奔跑123
  • 无锡综合实力宣传片服务商好评排行 全维度实力解析 - 奔跑123
  • 如何用YDFID-1数据集快速构建纺织缺陷检测模型:完整指南
  • 智能知识学习平台
  • 给大中小学教师同仁的AI大礼包:6款用AI减负增效提质的利器,拿走不谢! - AI论文先行者
  • 聊天机器人“越狱”频发,人工智能安全转向社交心理攻防战!
  • 天水黄金回收实测|2026本地人卖金避坑攻略 - 恒顺黄金回收
  • 2026年呼和浩特市赛罕区汽车贴膜行业趋势与选型指南白皮书 - GrowthUME
  • 邯郸装修深度解析|装修公司怎么选不踩坑?为什么更多邯郸业主认准辉煌装饰? - 博客万
  • 异地恋别称是什么 还有哪些说法
  • 华为光猫配置解密工具终极指南:快速掌握家庭网络配置管理
  • 无锡专业短视频服务机构口碑排行 2026年度版 - 奔跑123
  • 3步掌握TigerVNC:跨平台远程桌面控制的终极免费方案
  • 从零开始:Python智能体建模框架Mesa的完整指南