【算法与数据结构】70、LeetCode爬楼梯

文章目录

所有的LeetCode题解索引,可以看这篇文章------【算法和数据结构】LeetCode题解

一、题目

二、解法

思路分析:因为每次可以爬1阶或者2阶台阶,若想到达第i阶,则有两种情况:在第i-2阶台阶处一次爬2阶(如果一次一阶爬两次到第i阶的情况属于后面一种),或者是在第i-1阶一次爬1阶。假设dp数组代表到达第i阶的方法,那么根据上述分析,有 d p [ i ] = d p [ i − 1 ] + d p [ i − 2 ] dp[i]=dp[i-1]+dp[i-2] dp[i]=dp[i−1]+dp[i−2]。

程序如下:

cpp 复制代码
class Solution {
public:
	int climbStairs(int n) {		// 1 1 2 3 5 8 13 21
		//if (n < 1) return 0;		// n在[1,45]之间
		vector<int> dp(n + 1);	// 动态规划中的dp数组
		dp[0] = 1;
		dp[1] = 1;
		for (int i = 2; i <= n; i++) {
			dp[i] = dp[i - 1] + dp[i - 2];
		}
		return dp[n];
	}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)。
  • 空间复杂度: O ( n ) O(n) O(n)。

同样,我们只用到了两个数,进行算法优化,将空间复杂度降低到O(1)。程序如下:

cpp 复制代码
class Solution {
public:
	int climbStairs(int n) {		// 1 1 2 3 5 8 13 21
		//if (n < 1) return 0;		// n在[1,45]之间
		vector<int> dp(n + 1);	// 动态规划中的dp数组
		dp[0] = 1;
		dp[1] = 1;
		for (int i = 2; i <= n; i++) {
			dp[i] = dp[i - 1] + dp[i - 2];
		}
		return dp[n];
	}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)。
  • 空间复杂度: O ( 1 ) O(1) O(1)。

三、完整代码

cpp 复制代码
# include <iostream>
# include <vector>
using namespace std;

//class Solution {
//public:
//	int climbStairs(int n) {		// 1 1 2 3 5 8 13 21
//		//if (n < 1) return 0;		// n在[1,45]之间
//		vector<int> dp(n + 1);	// 动态规划中的dp数组
//		dp[0] = 1;
//		dp[1] = 1;
//		for (int i = 2; i <= n; i++) {
//			dp[i] = dp[i - 1] + dp[i - 2];
//		}
//		return dp[n];
//	}
//};

class Solution {
public:
	int climbStairs(int n) {
		int dp[2] = {1, 1};
		for (int i = 2; i <= n; i++) {
			int sum = dp[0] + dp[1];
			dp[0] = dp[1];
			dp[1] = sum;
		}
		return dp[1];
	}
};

int main() {
	int n = 4;
	Solution s1;
	int result = s1.climbStairs(n);
	cout << result << endl;
	system("pause");
	return 0;
}

end

相关推荐
秋说1 小时前
【PTA数据结构 | C语言版】一元多项式求导
c语言·数据结构·算法
Maybyy1 小时前
力扣61.旋转链表
算法·leetcode·链表
卡卡卡卡罗特3 小时前
每日mysql
数据结构·算法
chao_7894 小时前
二分查找篇——搜索旋转排序数组【LeetCode】一次二分查找
数据结构·python·算法·leetcode·二分查找
lifallen5 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法
lixzest5 小时前
C++ Lambda 表达式详解
服务器·开发语言·c++·算法
EndingCoder5 小时前
搜索算法在前端的实践
前端·算法·性能优化·状态模式·搜索算法
丶小鱼丶5 小时前
链表算法之【合并两个有序链表】
java·算法·链表
不吃洋葱.5 小时前
前缀和|差分
数据结构·算法
jz_ddk8 小时前
[实战]调频(FM)和调幅(AM)信号生成(完整C语言实现)
c语言·算法·信号处理