• 变态跳台阶


    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
     
    思路:(重要是分析)
      本题前提是n个台阶,会有n阶的跳发,分析如下:
      f(1) = 1
      f(2) = f(2-1)+ f(2 -2)  //f(2-2)代表2阶台阶一次跳2阶的次数
      f(3) = f(3 -1) + f(3 -2) + f(3-3)
      ......
      f(n) = f(n-1) + f(n-2) + f(n - 3)+ .....+ f(n - (n-1)) + f(n-n)
      说明:
      1、这里的f(n)代表的是n个台阶有一次1,2,。。。。,n阶的跳法数
      2、n = 1时,只有一种跳发,f(1) = 1
      3、n = 2时,有两种跳发,一种1阶1阶跳,或者是直接跳2阶,f(2) = f(2 -1) + f(2 - 2)
      4、 n = 3时,会有三种跳发:1阶、2阶、3阶
        那么第一次跳出一阶后面剩下:f(3 - 1);第一次跳出2阶,剩下f(3 -2);第一次3阶,剩下f(3 -3)
        有结论:f(3) = f(3 -1) + f(3 -2) + f(3 - 3)
      5、n = n时,会有n种跳的方式,1,2,3,4,5,。。。。,n阶
        结论:f(n) = f(n - 1) + f(n - 2) + .....+ f(n - (n - 1) ) + f(n - n)
      6、由以上可得到另一种结论:
        f(n - 1) = f(0) + f(1) + f(2) + .....+ f((n -1) -1) = f(0) + f(1) +f(2) + ...... +f(n - 2)
        f(n ) = f(0) + f(2) + f(3) + ......+f(n - 2) + f(n - 1) = f(n - 1) + f(n - 1)
        ==>f(n) = 2 * f(n - 1)
      7、因此由此结论:
        n <= 0:  
            f(n) = 0;
        n == 1:
            f(n) = 1;
        n >= 2:
            f(n) = 2 * f(n - 1)
    代码实现:
      递归:
    class Solution {
    public:
        int jumpFloorII(int number) {
            if(number <= 0)
                return 0;
            if(number == 1)
                return 1;
            return 2 * jumpFloorII(number -1);
        }
    };
      动态规划:
    class Solution {
    public:
        int jumpFloorII(int number) {
            if(number <= 0)
                return -1;
            if(number == 1)
                return 1;
            int sum = 1;
            
            for(int i = 2;i <= number;i++)
            {
                sum = 2 * sum;
            }
            return sum;
        }
    };
  • 相关阅读:
    动态网页技术--JSP(5)
    动态网页技术--JSP(4)
    动态网页技术--JSP(3)
    动态网页技术--JSP(2)
    动态网页技术--JSP(1)
    动态网页技术--Servlet
    TomCat服务器搭建
    06_多线程
    05_进程间通信 IPC
    04_进程池
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12451541.html
Copyright © 2020-2023  润新知