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);
        }
    };
  • 相关阅读:
    Android之Handler
    错误一览表
    Android ImageView 的scaletype属性详细介绍 转
    Adobe Flash/Dreamweaver/Fireworks CS3 软件不能安装问题
    MySQL修改表属性的SQL语句
    Apache与Tomcat整合
    mySQL常用SQL语句技法
    今天第一次写博客
    Tomcat+JSP经典配置实例
    整合Apache+Tomcat服务器2
  • 原文地址:https://www.cnblogs.com/whisperbb/p/11711065.html
Copyright © 2011-2022 走看看