Python算法題(一)——青蛙跳台階


  題目一(青蛙跳台階):

  一只青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上一個n級的台階總共有多少種跳法。

  分析:

  假設只有一級台階,則總共只有一種跳法;

  假設有兩級台階,則總共有兩種跳法;

  假設有n級台階,那么第一步就要分為跳一步和跳兩步:

  跳一步,那么接下來就是跳n-1;

  跳兩步,那么接下來就是跳n-2;

  所以,總數可以認為是f(n-1)+f(n-2)。

  主要代碼:

  def frog(num):

    if num <= 2:
      return num
    t1, t2 = 1, 2
    for _ in range(3, num+1):
      t1, t2 = t2, t1+t2
    return t2

 

  題目二(變態跳台階): 

  一只青蛙一次可以跳上1級台階,也可以跳上2級......它也可以跳上n階。求該青蛙跳上一個n級的台階總共有多少種跳法。

  分析:

  相比之前的跳台階,這次可以從任意台階跳上n級,所以總體來看與上一個問題差不多,只不過遞歸公式應該是各個台階之和再加上直接跳上去的情況,所以總數應該是f(n-1)+f(n-2)+f(n-3)+...+f(2)+f(1)=2**n-1。

  主要代碼:

  def frog(num):

    if num==0:

      return 0

    return 2**(num-1)

  拓展問題(矩形覆蓋):

  我們可以用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?

  分析:

  這個問題實際上就是普通的跳台階問題,只不過說法不一樣而已。

  假設n=1,則只有一種方法;

  假設n=2,則共有兩種方法;

  假設n=3,則分為兩種情況:

  第一次用一個矩形豎着覆蓋(左圖陰影),則剩下共有2(n-1)種方法

  第二次用一個矩形橫着覆蓋(右圖藍色),那么下方區域只剩下圖示一種方法,所以剩下1(n-2)種方法

 

  最后可以看出求矩形覆蓋問題和求青蛙跳台階問題的通式是一樣的,它們都符合斐波那契數列的通式,即f(n-1)+f(n-2)

 

  主要代碼:

  def rectangle(num):

    if num <= 2:
      return num
    t1, t2 = 1, 2
    for _ in range(3, num+1):
      t1, t2 = t2, t1+t2
    return t2

  通過這幾個題目我們可以看出,其實很多題目都有共通之處,甚至有些題目的變題會更簡單,所以我們需要從平時開始積累,日積月累下來,我們見識過的題目多了,自然而然寫代碼的水平就上去了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM