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)方法…