劍指offer 面試10題


面試10題:

題目:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。n<=39

 n=0時,f(n)=0 n=1時,f(n)=1 n>1時,f(n)=f(n-1)+f(n-2)

解題代碼一:基於循環(推薦)

代碼如下:

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        small=0
        big=1
        if n<=0:
            return 0
        if n==1:
            return 1
        for i in range(2,n+1):
            sum_i=small+big
            small=big
            big=sum_i
        return big

解題代碼二:基於遞歸(不太推薦,效率低,可能不能通過)

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        if n<=0:
            return 0
        elif n==1:
            return 1
        return self.Fibonacci(n-1)+self.Fibonacci(n-2)
            

 解題思路三:還可以采用求矩陣乘方的方法,詳見劍指offer P77

 

題目拓展1:跳台階

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

解題代碼同上:

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloor(self, number):
        # write code here
        if number==1:
            return 1
        if number==2:
            return 2
        small,big=1,2
        for i in range(2,number):
            sum_i=small+big
            small=big
            big=sum_i
        return big

 題目拓展2:變態跳台階

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

解題思路:由數學歸納法得規律。

解題代碼:

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        if number<=0:
            return 0
        return 2**(number-1)

 

題目拓展3:矩形覆蓋

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

解題思路:這道題本質上還是斐波那契數列問題,注意分析n=0,1,2,3,...的值的情況。

解題代碼:

# -*- coding:utf-8 -*-
class Solution:
    def rectCover(self, number):
        # write code here
        if number<=0:
            return 0
        if number==1:
            return 1
        if number==2:
            return 2
        small,big=1,2
        for i in range(3,number+1):
            sum_i=small+big
            small=big
            big=sum_i
        return big

 


免責聲明!

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



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