題目大意:有一個樓梯,一次可以走一步也可以走兩步。問從底部走到頂部有多少種不同的走法。
狀態是每個臺階的走法,用一個數組維護,最後頂部臺階的走法就是答案。
那麼狀態轉移的方式是:某個臺階可以從前面一個臺階一步上來,也可以從前兩個臺階走兩步上來。那麼走到臺階的走法數量就是前面一個臺階的數量加上前兩個臺階的數量。即:
完整代碼如下:
class Solution {
public:
int climbStairs(int n) {
const int maxn = 10000;
int steps[maxn];
memset(steps, 0, sizeof(steps));
steps[0] = 1;
steps[1] = 2;
for(int i = 2; i < n; i++){
steps[i] = steps[i - 1] + steps[i - 2];
}
return steps[n - 1];
}
};