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
  • 相关阅读:
    node连接mysql数据库
    mysql重置密码
    CSS vertical-align 属性
    JS中常用的字符串方法
    JS中的常用数组方法
    获取下拉菜单中具有SELECTED属性元素的序号和值的方法
    基本的正则表达式符号
    让多个文本输入框左侧对齐方法
    CSS选择器权重对比
    让内联元素支持宽高的几个设置
  • 原文地址:https://www.cnblogs.com/yanmk/p/9186111.html
Copyright © 2011-2022 走看看