力扣-70-爬楼梯/BM-63-跳台阶
动态规划入门题
2022/10/24 第一次面试被要求写代码,1没有熟悉到像肌肉记忆一般写出,2完全失去思考能力
- dp数组定义:dp[i]表示跳到第i级台阶的方法数
对于任意第i级台阶,它可能是第i-1级台阶跳1级到达的,也可能是i-2级台阶跳2级到达的 - 状态转移方程:
dp[i] = dp[i-1]+dp[i-2]
- 初始化,这了为了确保正确性,dp[0]要初始化为1
int jumpFloor(int number) { vector<int> dp(number + 1); dp[0] = 1; dp[1] = 1; for (int i = 2; i <= number; i++) dp[i] = dp[i - 1] + dp[i - 2]; return dp[number]; }
然后考虑空间压缩,用三个变量来替代dp数据,将空间复杂度由O(N)优化到O(1)
注意这里cur=1
的初始化,是考虑到number=1
的输入
int jumpFloor(int number) { int pre1 = 1, pre2 = 1, cur =1; for (int i = 2; i <= number; i++) { cur = pre1 + pre2; pre1 = pre2; pre2 = cur; } return cur; }
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16525330.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步