zoukankan      html  css  js  c++  java
  • 变态跳台阶

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

    和上一个思路差不多,找规律

    台阶数, 跳法

    1  1

    2  2

    3  4

    4  8

    5  16

    得出两个规律

    规律一:f(n) = 2*f(n-1)

    规律二:f(n) = 2^(n-1)

    规律一用于递归写法,规律二用于循环写法

    先说递归写法

    //思路:找规律f(n) = 2*f(n-1)
    class Solution {
    public:
        // 递归写法,应该会超时 f(n) = 2*f(n-1)
        int jumpFloorII(int number) {
            if (number <= 0)
                return 0;
            else if(number == 1)
                return 1;
            else return 2*jumpFloorII(number-1);
        }
    
    };

    再说非递归

    //思路:找规律f(n) = 2*f(n-1)
    class Solution {
    public:
        
    // 非递归写法 f(n) = 2^(n-1)
        int jumpFloorII(int number) {
            if(number <= 0)
                return 0;
            int times = 1;  // pow(2,number-1);
            for(int i = 1; i < number; i++)
                times *= 2;
            
            return times;
        }
    };

    还可以换成调用函数的方法   在cmath 中有个函数pow(a, b)  就是a^b  a的b次方, 但是左移是最快的

    class Solution {
    public:
    // 非递归写法 f(n) = 2^(n-1)
        int jumpFloorII(int number) {
            if(number <= 0)
                return 0;
            return 1<<(number-1); // pow(2, number-1)
        }
    };

    注意这里 a << b ==>a*2^b  就是a乘以2的b次方

        a>>b ==> a/2^b       a除以a的b次方

      

    左移右移详解

  • 相关阅读:
    使用jxl.jar操作Excel
    ThreadLocal学习
    ArrayList与Vector、HashMap与HashTable
    String, StringBuffer, StringBuilder比较
    ArrayList与LinkedList实现比较
    Java文件备份类
    Maven安装与更新
    Eclipse安装反编译工具JadClipse
    Linux关闭防火墙
    Hadoop简介
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12456769.html
Copyright © 2011-2022 走看看