TAG
动态规划
类-斐波拉切
方法
之前写算法作业时做过,所以现在看起来就很简单了…
满足以下递推式:
A(1) = 1
A(2) = 2
A(n) = A(n-1) + A(n-2)
其中A(n)表示到第n步梯子时有多少中不同的爬法。记得以前高中时也考过这个题.. 当时也不会。
想想,其实自己以前也不够聪明的… 想来聪明也可来自强大的记忆力和广博的经历。多多刷题啊..
代码
class Solution {
public:
int climbStairs(int n) {
vector<int> R(n) ;
R[0] = 1 ;
R[1] = 2 ;
for(size_t i = 2; i < n; ++i)
{
R[i] = R[i-1] + R[i-2];
}
return R[n-1];
}
};
后记
代码考虑不完全!
看了题解,才突然发现自己没有考虑n为小于等于0的情况…b边界条件还是考虑不周啊.虽然不影响最后的提交结果…
可以比较容易地写出空间O(1)的版本
犹记得当年写斐波拉切时,我只会学着书上用递归,学长用的数组,网上找到O(1)方法…