是第70題
題目大意:你要爬一個有 n 階的樓梯,每次可以爬 1 階 或 2 階,那總共有多少種不同的方法可以爬到頂端。其實這題的本質就是 費波那契數列(Fibonacci),因為爬到第 n 階的方法數,等於爬到 n-1 階的方法數 + 爬到 n-2 階的方法數。
class Solution {
public int climbStairs(int n) {
if (n <= 1) return 1; // 0 或 1 階只有一種方法
int a = 1; // f(0) 或前一個狀態
int b = 1; // f(1) 或目前狀態
for (int i = 2; i <= n; i++) {
int next = a + b; // f(i) = f(i-1) + f(i-2)
a = b; // 向前移動:新的 f(i-2) = 原本 f(i-1)
b = next; // 新的 f(i-1) = f(i)
}
return b; // b 現在是 f(n)
}
}