LintCode Python 簡單級題目 111.爬樓梯 (斐波納契數列 青蛙跳)


題目描述:

假設你正在爬樓梯,需要n步你才能到達頂部。但每次你只能爬一步或者兩步,你能有多少種不同的方法爬到樓頂部?

比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法

返回 3

標簽 
 
題目分析:

**設f(n)為n階台階的情況下,所有不同的跳法方法的總和!**
1.如果起始跳一階的話,剩余的n-1階就有 f(n-1) 種跳法;
2.如果起始跳二階的話,剩余的n-2階就有 f(n-2) 種跳法;
所以f(n) = f(n-1) + f(n-2),實際結果即為斐波納契數。

源碼:

 

class Solution:
    """
    @param n: An integer
    @return: An integer
    """
    def climbStairs(self, n):
        # write your code here
        if n == 0: return 1
        if n == 1: return 1
        
        tmpList = [1,1]
        for i in range(0,n-1):
            x = tmpList[-1] + tmpList[-2]
            tmpList.append(x)
        return tmpList[-1]

 

  

**進階** 

如果某人可以一次性跳1~n階,那他跳完n階台階有多少種跳法?

**設f(n)為n階台階的情況下,所有不同的跳法方法的總和!**
1.如果起始跳一階的話,剩余的n-1階就有 f(n-1) 種跳法;
2.如果起始跳二階的話,剩余的n-2階就有 f(n-2) 種跳法;
3.如果起始跳三階的話,剩余的n-2階就有 f(n-3) 種跳法;

...
n.如果起始跳n階的話,剩余的n-2階就有 f(n-n) 種跳法;

假定f(0) = 1,已知一階台階時,跳法只有一種,所以f(1) = 1
所以f(2) = 1+1 = 2


得:  f(n) = f(n-1)+f(n-2)+f(n-3)...+...+f(n-(n-1))+f(n-n)

        f(n) = f(n-1)+f(n-2)+f(n-3)+...+f(0)

又:  f(n-1) = f(n-2)+f(n-3)...+...+f(0)
    f(n-2) = f(n-3)+f(n-4)...+...+f(0)

則:  f(n) = 2 * f(n-1)

       = 2^2 * f(n-2)

        = 2^(n-2) * f(2) 

**最終結果f(n) = 2^(n-1) **

 

class Solution:
    """
    @param n: An integer
    @return: An integer
    """
    def climbStairs(self, n):
        # write your code here
        if n == 0: return 1
        return 2**(n-1) 


免責聲明!

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



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