zoukankan      html  css  js  c++  java
  • 【剑指Offer】跳台阶&变态跳台阶

    跳台阶

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
    当n = 1时,有一种跳法。f(1) = 1
    当n = 2时,有两种跳法,跳两次,一次跳一级。跳一次,直接跳两级。 f(2) = 2
    当n > 2时,第一次跳一级,这时跳法数目就等于后面n - 1级的跳法数目,第一次跳两级,这时跳法数目就等于后面n - 2级的跳法数目。因此f(n) = f(n-1) + f(n-2)。结果为斐波那契数列。
    解法一、递归 (时间复杂度随输入规模呈指数级增长)
    class Solution {
    public:
        int jumpFloor(int number) {
            if(number == 1) return 1;
            if(number == 2) return 2;
            return jumpFloor(number - 1) + jumpFloor(number - 2);
        }
    };

    解法二、迭代

    class Solution {
    public:
        int jumpFloor(int number) {
            int x = 1,y = 2, z;
            if(number == 1) return 1;
            if(number == 2) return 2;
            for(int i = 3; i <= number; ++i){
                z = y;
                y = x + y;
                x = z;
            }
            return y;
        }
    };

     变态跳台阶

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
    当n = 1时,f(1) = 1
    当n = 2时,f(2) = 2
    当n = 3时,f(3) = f(1) + f(2) + 1.
    因此f(n) = f(n-1) + f(n-2) + .....+ 1
    f(n-1) = f(n-2) + f(n-3) + ....+1
    f(n) - f(n-1) = f(n-1)   ==> f(n) = 2f(n-1)
    class Solution {
    public:
        int jumpFloorII(int number) {
            if(number == 0 || number == 1) return 1;
            return 2 * jumpFloorII(number - 1);
        }
    };
  • 相关阅读:
    hdu 5101 Select
    hdu 5100 Chessboard
    cf B. I.O.U.
    cf C. Inna and Dima
    cf B. Inna and Nine
    cf C. Counting Kangaroos is Fun
    Radar Installation 贪心
    spfa模板
    Sequence
    棋盘问题
  • 原文地址:https://www.cnblogs.com/whisperbb/p/11711065.html
Copyright © 2011-2022 走看看