代码随想录训练营第三十八天 | 动态规划
今天是第三十八天,最难的动态规划要开始了
class Solution { public int fib(int n) { if(n < 2){ return n; }int[] fibNum = new int[n+1]; fibNum[0] = 0; fibNum[1] = 1; for(int i = 2; i<= n; i++){ fibNum[i] = fibNum[i-1]+fibNum[i-2]; } return fibNum[n]; } }
最基础的dp,用前面数组的值来组成当前数组的值
class Solution { public int climbStairs(int n) { if(n==1){ return n; } int[] step = new int[n+1]; step[0] = 1; step[1] = 1; for(int i = 2; i<=n; i++){ step[i] = step[i-1] + step[i-2]; } return step[n]; } }
和上一题一个思路,这一步可以通过step[n-1]迈一步和step[n-2]迈两步来实现,因此把它们两个加起来就是当前这一步的拥有的可能性。
class Solution { public int minCostClimbingStairs(int[] cost) { int n = cost.length; for(int i = 2; i<n;i++){ cost[i] = Math.min(cost[i-1] + cost[i], cost[i-2]+cost[i]); } return Math.min(cost[n-1], cost[n-2]); } }
通过让当前步数加上之前的代价来判断达到当前步数的代价大小。直接返回可以到达当前步数的最小代价即可。
今天都是最基础的dp,但是难点就要来了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?