【算法与数据结构】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

相关推荐
sali-tec6 小时前
C# 基于halcon的视觉工作流-章66 四目匹配
开发语言·人工智能·数码相机·算法·计算机视觉·c#
小明说Java6 小时前
常见排序算法的实现
数据结构·算法·排序算法
行云流水20197 小时前
编程竞赛算法选择:理解时间复杂度提升解题效率
算法
smj2302_796826528 小时前
解决leetcode第3768题.固定长度子数组中的最小逆序对数目
python·算法·leetcode
cynicme9 小时前
力扣3531——统计被覆盖的建筑
算法·leetcode
core5129 小时前
深度解析DeepSeek-R1中GRPO强化学习算法
人工智能·算法·机器学习·deepseek·grpo
mit6.8249 小时前
计数if|
算法
a伊雪10 小时前
c++ 引用参数
c++·算法
Data_agent11 小时前
1688获得1688店铺列表API,python请求示例
开发语言·python·算法
2301_7644413311 小时前
使用python构建的应急物资代储博弈模型
开发语言·python·算法