力扣-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;
}