力扣-70-爬楼梯/BM-63-跳台阶

动态规划入门题


2022/10/24 第一次面试被要求写代码,1没有熟悉到像肌肉记忆一般写出,2完全失去思考能力


  1. dp数组定义:dp[i]表示跳到第i级台阶的方法数
    对于任意第i级台阶,它可能是第i-1级台阶跳1级到达的,也可能是i-2级台阶跳2级到达的
  2. 状态转移方程:dp[i] = dp[i-1]+dp[i-2]
  3. 初始化,这了为了确保正确性,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;
}
posted @ 2022-07-27 16:28  YaosGHC  阅读(41)  评论(0)    收藏  举报