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

【每日算法C#】爬楼梯问题 LeetCode

public int ClimbStairs(int n) 
{int[] dp = new int[n + 1];  // 创建DP数组dp[0] = 1;  // 基础情况:0阶有1种方法(不动)dp[1] = 1;  // 基础情况:1阶有1种方法(爬1步)for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];  // 状态转移方程}return dp[n];  // 返回n阶的解
}

关键点解析

  1. 动态规划思想

    • 将大问题分解为小问题(到达第 i 阶的方法数)
    • 存储子问题解避免重复计算
  2. 状态定义

    • dp[i] 表示爬到第 i 阶楼梯的方法总数
  3. 状态转移方程

    • dp[i] = dp[i-1] + dp[i-2]
    • 解释:到达第 i 阶只能从:
      • 第 i-1 阶爬 1 步
      • 第 i-2 阶爬 2 步
  4. 基础情况

    • dp[0] = 1 :起点,不需要移动
    • dp[1] = 1 :只有 1→1 这一种方式

复杂度分析

维度说明
时间复杂度O(n)单次遍历完成计算
空间复杂度O(n)需要长度为 n+1 的数组

示例计算(n=4)

dp[0] = 1
dp[1] = 1
dp[2] = dp[1] + dp[0] = 1 + 1 = 2
dp[3] = dp[2] + dp[1] = 2 + 1 = 3
dp[4] = dp[3] + dp[2] = 3 + 2 = 5

空间优化(O(1)空间):

public int ClimbStairs(int n) 
{if (n <= 1) return 1;int a = 1, b = 1;for (int i = 2; i <= n; i++) {int temp = a + b;a = b;b = temp;}return b;
}

动态规划(Dynamic Programming)

动态规划(Dynamic Programming,简称DP)是一种解决复杂问题的算法思想,其核心理念可概括为以下五个关键点:

1. 分治思想(Divide and Conquer)
  • 本质:将大问题分解为相互关联的子问题
  • 特点:子问题不是独立的,而是相互重叠的
  • 类比:像拼图游戏,先解决局部小块,再组合成完整画面
  • 示例:斐波那契数列中 fib(n) = fib(n-1) + fib(n-2)
2. 最优子结构(Optimal Substructure)
  • 核心原则:问题的最优解包含其子问题的最优解
  • 关键特征:局部最优解能推导出全局最优解
  • 反例:求最长路径问题(不满足最优子结构)
  • 示例:背包问题中,包含当前物品的最优解 = 当前物品价值 + 剩余容量最优解
3. 重叠子问题(Overlapping Subproblems)
  • 核心特征:不同子问题会重复计算相同内容
  • 解决方法:存储子问题解避免重复计算
  • 对比
    方法计算次数时间复杂度
    递归指数级O(2ⁿ)
    DP线性O(n)
  • 示例:计算斐波那契数列时,fib(3)会被多次计算

4. 状态存储(Memoization)

  • 核心机制:用表格(通常数组)存储子问题解
  • 两种实现
    1. 自顶向下:递归+记忆化(Top-down)
    2. 自底向上:迭代填表(Bottom-up)

5. 状态转移方程(State Transition Equation)

  • 核心引擎:定义子问题之间的关系
  • 通用形式: dp[i] = F(dp[i-1], dp[i-2], ..., 输入参数)
  • 设计步骤
    1. 定义状态: dp[i] 表示什么
    2. 初始化:边界条件设置
    3. 递推关系:如何从已知状态推导新状态
    4. 求解目标: dp[n] 或 max/min(dp)
    http://www.dtcms.com/a/482418.html

    相关文章:

  1. 网站制作很好 乐云践新二级网站建设情况说明书
  2. USDe 脱锚事件全景还原
  3. 【运维实践】深入理解 rsync+inotify:实时文件同步技术的原理与实践
  4. AI在生产制造过程中的实践分享
  5. 建一个优化网站多少钱抖音开放平台官网入口
  6. 智能电网变电站综合自动化虚拟仿真实验
  7. python自动化中(包括UI自动化和API自动化)env的作用和使用
  8. Xcode16 避坑
  9. 论文参考文献引用:规避查重率的有效策略
  10. 先楫平台使用Jlink调试
  11. 偏置电阻简介
  12. 【温室气体数据集】历史温室气体与气溶胶排放数据集 CEDS
  13. 家具品牌网站怎么做网站建设印花税
  14. 建医疗网站步骤seo优化的技巧
  15. 【小白笔记】strip的含义
  16. 第136期 谷歌Jules Tools反击Copilot的主导地位:重新定义工作流自动化18
  17. Apifox AI 测试用例生成:提高测试效率!
  18. 【SpringBoot启动异常】解决@profileActive@相关异常问题
  19. 深圳建设营销型网站1做网站的公司
  20. 充电桩直流电能表导轨安装 精准计量 智慧运营
  21. 像饿了码的网站建站有吗吉林省建设厅官网查询
  22. CI/CD产品选型调研
  23. 手写MyBatis第107弹:@MapperScan原理与SqlSessionTemplate线程安全机制
  24. 专家深度解析5种关键优化方法,助力品牌在AI搜索引擎中脱颖而出
  25. 开发实践:基于 PHP+Uniapp 的海外版上门预约系统
  26. 迁安网站建设网站没快照
  27. 拜尔滤镜详细解释,原理和实践
  28. XML Schema 复合类型 - 混合内容
  29. C++客服端访问redis
  30. 用【WPF+Dlib68】实现 侧脸 眼镜虚拟佩戴 - 用平面图表现空间视觉