iT邦幫忙

0

leetcode with python:70. Climbing Stairs

  • 分享至 

  • twitterImage
  •  

題目:

You are climbing a staircase. It takes n steps to reach the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

你可以一次爬1或2階樓梯,那爬n階樓梯的方式有幾種

我們可以把方法歸類成兩種,最後一步爬一階跟最後一步爬二階
即爬n-1階的方法數+爬n-2階的方法數加起來就是爬n階的方法數
我們可以列式:f(n)=f(n-2)+f(n-1)
我們發現這其實就是個類費波那契數列(Fibonacci sequence)的結構
只要知道f(1),f(2)就能推斷出其他f(n)
而我們知道f(1)=1(一次一階),f(2)=2(一次二階和兩次一階)便可以開始實作了

class Solution:
    def climbStairs(self, n: int) -> int:
        ans=[1,2]
        for i in range(2,n):
            ans.append(ans[-1]+ans[-2])
        return ans[n-1]

建立一個陣列,第n項即代表f(n)的值
先將f(1),f(2)放入陣列,之後append的新項為末兩項和
直到append到第n項(即得知了我們要的f(n))
就回傳我們算出的f(n)值
不用遞迴是因為複雜度來到O(2^n),容易超時
最後執行時間24ms(faster than 98.81%)

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言