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
  • 相关阅读:
    [openshift]openshfit OKD的安装
    [Docker]记一次使用jenkins将镜像文件推送到Harbor遇到的问题
    [k8s]创建Kubernetes的ssl/tls用户
    [k8s]ubuntu18 + Heketi + Glsuterfs的独立部署
    [k8s]kubernetes dashboard的安装
    [K8S]kubeadm国内镜像安装方式
    [K8S]污点调度
    [GO]解决golang.org/x/ 下包下载不下来的问题
    [GO]删除切片的某个值
    layui静态初始化渲染表单样式
  • 原文地址:https://www.cnblogs.com/yanmk/p/9186111.html
Copyright © 2011-2022 走看看