1. 题目描述
难度:简单
2. 题目分析
爬楼梯这道题是一个很典型的问题了,这是一道经典的动态规划的问题:
- 动态规划
不难发现,这个问题可以被分解为一些包含最优子结构的子问题,即它的最优解可以从其子问题的最优解来有效地构建,我们可以使用动态规划来解决这一问题。
时间复杂度O(n), 空间复杂度O(n)。
3. C语言实现
代码如下:
int climbStairs(int n){
if(n == 1) return 1;
int* dp = (int *)malloc(sizeof(int)*(n+1));
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= n; i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
运行结果为: