zoukankan      html  css  js  c++  java
  • 《剑指offer》2:青蛙跳台阶

    一.题目:

    一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

    二.题目分析

    拿到这个题目我们冥思苦想也没有想到一个好的想法,于是从最简单的找规律开始吧!

    另台阶的级数为n,跳法的数量为ret.

    n=1, ret=1

    n=2, ret=2

    n=3, ret=3

    n=4, ret=5 

    n=5, ret=8

    如下图所示:

     从中分析可得ret等于上一个ret的值加上 上上个ret的大小。就如同斐波那契数列一样,但是这只是一个猜想,具体是不是这样的呢?

    我们换一个思考的方向,让青蛙从第n个台阶往回跳,记在第n个台阶时可能跳的跳法为f(n)个。假设它往回跳只跳了一格,那么停留在n-1处,还有f(n-1)种跳法,假设他往回跳了2格,那么它还具有f(n-2)中跳法,一共就具有这两种情况,因此f(n)=f(n-1)+f(n-2),这个表达式正好和斐波那契数列的递归解法的表达式相同,因此也可以使用同样的迭代解法来求解这个问题,同时这也证明了我们之前的猜想是正确的。如下图所示:

     三.代码实现

    代码实现就很简单了,实现和斐波那契数列差不多,如下所示:

    # -*- coding:utf-8 -*-
    class Solution:
        def jumpFloor(self, number):
            # write code here
            if number<1:
                return 0#在Number小于1的时候
            if number==1:
                return 1
            if number==2:
                return 2
            
            ret=0
            a=1
            b=2
            for i in range(3,number+1):
                ret=a+b
                a=b
                b=ret
            return ret

    得解,牛客网上显示:

  • 相关阅读:
    IceFig阅读笔记
    sift算法中翻译的第11页中比值问题
    Hessian矩阵
    python使用jieba实现中文文档分词和去停用词
    Hanlp配置自定义词典遇到的问题与解决方法
    HanLP-分类模块的分词器介绍
    elasticsearch教程--中文分词器作用和使用
    HanLP-最短路径分词
    史上最全中文分词工具整理
    NLP自然语言处理中英文分词工具集锦与基本使用介绍
  • 原文地址:https://www.cnblogs.com/geeksongs/p/13439774.html
Copyright © 2011-2022 走看看