zoukankan      html  css  js  c++  java
  • 剑指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
  • 相关阅读:
    ActiveSync合作关系对话框的配置
    WINCE对象存储区(object store)
    Wince 隐藏TASKBAR的方法
    Wince输入法换肤换语言机制
    poj 3080 Blue Jeans 解题报告
    codeforces A. Vasily the Bear and Triangle 解题报告
    hdu 1050 Moving Tables 解题报告
    hdu 1113 Word Amalgamation 解题报告
    codeforces A. IQ Test 解题报告
    poj 1007 DNA Sorting 解题报告
  • 原文地址:https://www.cnblogs.com/yanmk/p/9186111.html
Copyright © 2011-2022 走看看