• JZ71青蛙跳台阶扩展问题(斐波那契数列问题)


    《剑指offer》面试题10(关于青蛙跳台阶之斐波那契数列)扩展问题:
    我们知道,当青蛙一次只能跳一阶或者两阶的时候,我们可以把问题转换为斐波那契数列用递归或者非递归的形式予以计算,但是,若青蛙一次能跳的阶数在n阶以内(包括n阶)时,又该如何计算呢?

    题目:
    在青蛙跳台阶的问题中,如果把条件改成:一只青蛙一次可以跳上1级台阶,也可以跳上2级…也可以跳上n级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?

    思路:
    如果青蛙选择第一次跳1阶,那么接下来最多只能跳n-1阶,也就最多能有n-1种跳法,如果青蛙选择第一次跳2阶,那么接下来最多只能跳n-2阶,也就最多能有n-2种跳法,…,依次类推如果青蛙选择第一次跳n-1阶,那么接下来最多只能跳1阶,也就最多能有1种跳法,所以,设该青蛙跳上一个n级的台阶总共有f(n)种跳法,则f(n)= f(n-1)+ f(n-2)+ f(n-3)+ … + f(1)。而f(n-1)= f(n-2)+ f(n-3)+ f(n-4)+…+ f(1)。两式相减得f(n)= 2 * f(n-1)= 2 * 2 * f(n-2)=2 * 2 * 2 * f(n-3)=…=2^(n-1) * f(n-(n-1)) = 2^(n-1) * f(1)= 2^(n-1),代码如下:

    Java解题:

    /**
         * 青蛙能跳n阶以内
         * @param args
         */
        public int Fibonacci2(int n){
            
            if(n==0)
                return 0;
            
            /*if(n==1)
                return 1;*/
            //2*Fibornacci2(n-1)
            return (int) Math.pow(2,n-1);
        }

    Python解题:

    class Solution:
        def jumpFloorII(self , number: int) -> int:
            return 2**(number-1)
  • 相关阅读:
    Photosynth Deep Zoom 3D 应用演示效果~~酷!
    Python自由之路(四)变量作用域
    Python自由之路(二)Unittest Framework
    经典绚丽的JS特效收藏
    Helloworld Structs2 注意事项
    Blend 3.0 入门之数据绑定(How to Create SampleData)
    Python自由之路(三) 多线程处理
    Nutch 1.0 完全配置笔记
    Probems for Hosted ADO.NET Data Services & Silverlight
    如何开发你的第一个Java Google App Engine 程序
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/15968525.html
Copyright © 2020-2023  润新知