70. Climbing Stairs
題目的思路在於,當前這個位置可以兩個地方跳上來,第一種是來自從兩階之外,跳了兩階上來,另一種是自一階之外,跳了一階上來。
換句話說如果兩階之外的那個階梯,有 k
種方式達到,一階之外的階梯有 w
種方式達到,當前的位置就有 k + w
種達到的方式。
我在思考的時候有去想了一下這個問題,那就是要不要加一呢?所以想分享我的想法。
在算幾種方法的時候,如果我們只考慮一次只能走一階,其實走到 n
階也是只有一種走法,因為我們每次都是「加一」,這個題目會這樣問,是因為其餘的排列組合都是是透過不同的走法來走到的,並不是靠走了幾階去走到的。
上面的想法就可以用數學表達式來表達:$$ f(n) = k + w $$
其中 k
又可以是 \(f(n-2)\),w
又可以是\(f(n-1)\),替換後的數學表達式為:$$ f(n) = f(n-2) + f(n-1) $$
整個題目等同於 509. Fibonacci Number
但是要特別注意的是,到底最後 n
階,在斐波那契數所表達的 n
在這個題目的 n
為何?
class Solution:
def fib(self, n: int) -> int:
memo = [0] * (n+1)
memo[1] = 1
for i in range(2, n+1):
memo[i] = memo[i-1] + memo[i-2]
return memo[n]