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

相关推荐
重生之我要进大厂14 分钟前
LeetCode 876
java·开发语言·数据结构·算法·leetcode
KBDYD10101 小时前
C语言--结构体变量和数组的定义、初始化、赋值
c语言·开发语言·数据结构·算法
Crossoads1 小时前
【数据结构】排序算法---桶排序
c语言·开发语言·数据结构·算法·排序算法
自身就是太阳1 小时前
2024蓝桥杯省B好题分析
算法·职场和发展·蓝桥杯
孙小二写代码2 小时前
[leetcode刷题]面试经典150题之1合并两个有序数组(简单)
算法·leetcode·面试
little redcap2 小时前
第十九次CCF计算机软件能力认证-1246(过64%的代码-个人题解)
算法
David猪大卫2 小时前
数据结构修炼——顺序表和链表的区别与联系
c语言·数据结构·学习·算法·leetcode·链表·蓝桥杯
Iceberg_wWzZ2 小时前
数据结构(Day14)
linux·c语言·数据结构·算法
夏天天天天天天天#2 小时前
求Huffman树及其matlab程序详解
算法·matlab·图论
Infedium2 小时前
优数:助力更高效的边缘计算
算法·业界资讯