当前位置: 首页 > 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)。处理n1和n2的边界情况。7-12 分钟编写 C# 代码// 假设在一个名为 Solution 的类中实现public class Solution{/// summary/// 计算爬 n 阶楼梯的总方法数。/// 每次可爬 1 或 2 阶。/// /summary/// param namen楼梯总阶数。/param/// returns到达楼顶的不同方法数。/returnspublic 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 分钟简单测试与代码审查示例 1n 2代码直接返回 2。正确。示例 2n 3prev2 1,prev1 2i 3:currentWays 2 1 3.prev2 2,prev1 3.循环结束返回prev1(3)。正确。考虑 n1代码已处理。代码风格类名Solution方法名ClimbStairs参数n返回类型int符合 C# 和 LeetCode 规范。变量命名prev2,prev1,currentWays比a, b更具描述性提升了可读性。/// summary.../summaryXML 文档注释符合 C# 最佳实践清晰说明了方法功能、参数和返回值。思路注释也已加入。工程落地边界条件处理清晰变量命名有提升注释规范。14-15 分钟最终检查代码逻辑正确通过示例。符合 C# 和 LeetCode 提交要求。注释和命名规范比 Python 版有所提升更符合 C# 工程实践。整数范围int足够。【比赛结束】最终提交模拟using System;public class Solution{/// summary/// 计算爬 n 阶楼梯的总方法数。/// 每次可爬 1 或 2 阶。/// /summary/// param namen楼梯总阶数。/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 (可能爬 11 或 2)////// 采用动态规划迭代法实现空间复杂度为 O(1)时间复杂度为 O(n)。/// /remarkspublic 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,currentWays比a,b等更清晰地传达了变量的含义即使没有注释也能大致理解。添加using System;(虽然在这个例子中不是必需的但通常是 C# 文件开头的一部分)。更详细的思路说明在remarks标签中进一步展开了递推关系、边界条件和算法复杂度。总体而言15 分钟内用 C# 完成不仅解决了问题还体现了良好的工程实践和代码风格。如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。
http://www.zskr.cn/news/1380501.html

相关文章:

  • SciDownl终极指南:3步构建你的学术文献自动化下载系统
  • 3步实战:将闲置电视盒子改造为Armbian服务器的完整指南
  • 国内实力吊钩式抛丸机厂家排行:实测数据对比 - 奔跑123
  • Windows键盘重映射终极指南:如何使用SharpKeys专业解决方案告别误触烦恼
  • 市面上有哪些是真正安全的降AIGC网站(轻松压低AI生成疑似率)
  • 四进二出音视频选择器设计:从模拟开关到红外遥控的完整工程实践
  • 给大中小学教师同仁的AI大礼包:6款用AI减负增效提质的利器,拿走不谢! - AI论文先行者
  • 2026年呼和浩特市赛罕区汽车贴膜行业趋势与选型指南白皮书 - GrowthUME
  • docx-edit:用虚拟树的方式,优雅地编辑 Word文档
  • 水下多机器人仿真与运动规划框架Angler扩展解析
  • Keil C251中ECODE配置与启动代码修改指南
  • 从零开始:Python智能体建模框架Mesa的完整指南
  • SHAP原理与特征贡献解析
  • Actor Framework里的“多米诺骨牌”:一个错误如何让整个嵌套操作者链崩溃?
  • “--glow”并不存在?!深度逆向Midjourney 6.1源码级辉光模拟协议,曝光官方刻意隐藏的4个隐式辉光增强开关
  • 多平台新媒体矩阵一站式管理中台:从“人海战术“到“AI智能增长“的架构演进与实践解析
  • 别再只用余弦相似度了!5分钟搞懂Python里Levenshtein、Word2Vec、BERT怎么选
  • 还在为浏览器下载慢而烦恼?3分钟配置Motrix扩展,下载效率提升300%
  • 新用户注册Taotoken后快速获取API Key并完成首次模型调用的全过程
  • 原神智能自动化脚本实战指南:高效解放双手的完整解决方案
  • 聊天机器人“越狱”频发,人工智能安全转向社交心理攻防战!
  • 从零开始构建个人知识库:kepano-obsidian笔记模板完整指南
  • 每日一书㉗ | 刻意练习:为什么有些人努力一辈子还是平庸?
  • 【小白快速上手】 OpenClaw 安装部署全流程(含安装包)
  • ESP32搭建TFT_LCD中文字库,附常用字库
  • UnityExplorer:如何在游戏运行时实时调试和修改Unity项目
  • 如何3分钟完成Windows和Office永久免费激活:KMS_VL_ALL_AIO智能脚本终极指南
  • 拒绝“人肉搬砖”!实测实在Agent多智能体协作,如何重构企业级自动化天花板
  • 3分钟快速上手:B站视频解析API终极指南
  • 神泣纷争手游官网下载:神泣纷争最新官方下载渠道