• 递归和循环(斐波那契数列 、 跳台阶 、 变态跳台阶 、 矩形覆盖 )


    斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

    1.递归法 时间复杂度:O(2^n)

    public class Solution {
        public int Fibonacci(int n) {
            if(n==0) return 0;
            if(n==1) return 1;
            return Fibonacci(n-1)+Fibonacci(n-2);
        }
    }

    2.递推 时间复杂度:O(n)

    递归会重复计算大量相同数据,可以发现每次就用到了最近的两个数,所以我们可以只存储最近的两个数

    public class Solution {
        public int Fibonacci(int n) {
            if(n==0) return 0;
            if(n==1) return 1;
            int a=0,b=1,c=1;
            while(n--!=1){//for也行
                c=a+b;
                a=b;
                b=c;
            }
            return c;
        }
    }

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

    1.递归

    public class Solution {
        public int JumpFloor(int n) {
            if(n==1) return 1;
            if(n==2) return 2;
            return JumpFloor(n-1)+JumpFloor(n-2);
        }
    }


    2.递推

    public class Solution {
        public int JumpFloor(int n) {
            if(n==1) return 1;
            if(n==2) return 2;
            int a=1,b=2;
            for(int i=3;i<=n;i++){
                b=a+b;
                a=b-a;
            }
            return b;
        }
    }

    变态跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    分析:找递推公式,f(1)=1 f(2)=2 f(3)=4 f(4)=8.............f(n)=f(n-1)*2

    public class Solution {
        public int JumpFloorII(int n) {
            if(n==1) return 1;
            int r=1;
            for(int i=2;i<=n;i++)
                r=r*2;
            return r;
        }
    }

    矩形覆盖

    public class Solution {
        public int RectCover(int n) {
         if(n<=2) return n;
         int one=1,two=2;
         for(int i=3;i<=n;i++)
         {
             two=one+two;
             one=two-one;
         }
            return two;
    
        }
    }

    总结:这类题关键是找出递推公式!

  • 相关阅读:
    ajax相关知识总结
    http协议
    sass基础常用指南
    自定义上传图片样式并实现上传立即展示该图片
    HTML5 History 模式
    网页打印样式CSS
    session和cookie相关知识总结
    第二个冲刺周期
    软件工程学习进度表(第十三周)
    软件工程学习进度表(第十二周)
  • 原文地址:https://www.cnblogs.com/xuechengmeigui/p/12695424.html
Copyright © 2020-2023  润新知