一维动态规划
LeetCode 70 爬楼梯
题目描述:给定n阶台阶,每次可以走一步或者两步,求共有多少种方法走完n阶楼梯。
解析:考虑到到第阶楼梯的方式有两种,从第
阶走一步到达或者从第
阶走两步到达,即可推得到到达第
阶方法数
,即常见的斐波那契数列。
解法一:动态规划
时间复杂度
空间复杂度
class Solution {
public:
int climbStairs(int n) {
if (n <= 2) return n;
int pre=1, cur=2;
int tmp;
for (int i=3; i <= n; i++) {
// 更新pre, cur = cur, pre+cur;
tmp = pre;
pre = cur;
cur += tmp;
}
return cur;
}
};
解法二:矩阵快速幂
将原始递推公式转换为矩阵形式,如下所示:
因此对n而言:
矩阵快速幂求解详见另一节。
解法三:公式法
基于矩阵对角化推导斐波那契数列通项公式