70.爬楼梯
题目描述
假设你正在爬楼梯。需要n阶才能达到楼顶。
每次只能爬1阶或2阶。请问共有多少种不同的方法可以爬到楼顶?
思路与算法:
我们用dp[i]
来表示到第i
阶的方案数,由于题目限制每次只能爬1阶或2阶,所以可以得到动态规划的转移方程:
边界条件设置dp[0] = 1, dp[1] = 1
。
由于每次计算只用到了第i-1
阶和第i-2
阶的数据,所以可以只设置三个变量来代替数组,从而降低空间复杂度。
代码
class Solution {
public:
int climbStairs(int n) {
int p = 0, q = 0, r = 1;
for(int i = 1; i <= n; i++){
p = q;
q = r;
r = p + q;
}
return r;
}
};
复杂度分析
- 时间复杂度:循环执行了n次,每次花费常数的时间代价,故时间复杂度为O(n)。
- 空间复杂度:只用了常数个变量作为辅助空间,故空间复杂度为O(1)。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!