劍指offer JZ-8
阿新 • • 發佈:2021-01-04
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。 示例1輸入
複製1
返回值
複製1示例2
輸入
複製4
返回值
複製5
思路
動態規劃入門問題,定義dp[k]為到達第k階臺階的方案數,
由於上樓的方案有兩種,所以k臺階可由第k-1臺階和k-2臺階直接到達
故,dp[k] = dp[k-1] + dp[k-2]
class Solution { public: int jumpFloor(int number) { vector<intView Code> dp; if(number == 1) return 1; if(number == 2) return 2; dp.push_back(0); dp.push_back(1); dp.push_back(2); for(int i=3;i<=number;i++) { int now = dp[i-1] + dp[i-2]; dp.push_back(now); } return dp[number]; } };
我們發現,狀態k只依賴於狀態k-1和狀態k-2,所以空間上可以優化
class Solution { public: int jumpFloor(int number) { int pre_1 = 2; int pre_2 = 1; int now = 0; if(number == 1) return 1; if(number == 2) return 2; for(int i=3;i<=number;i++) { nowView Code= pre_1 + pre_2; pre_2 = pre_1; pre_1 = now; } return now; } };