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

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

    分析:当n = 1, f[n] = 1, 表示直接跳1级台阶

    n = 2, f[2] = f[1]+1, 表示从第1级台阶再跳1级台阶的跳法加上直接跳2级台阶

    n = 3, f[3] = f[1] + f[2] + 1,  表示从第1级台阶再跳2级台阶的跳法加上从第2级台阶再跳1级台阶的跳法直接跳3级台阶

    f[n] = f[1] + f[2] + f[3] + ... + f[n-1] + 1

          = 2 * f[n - 1] (n >=2时成立)

    有两种解法:递归,位运算。

    解法一:由于上述递归运算时间复杂度高,因此改成迭代解法

     1 class Solution {
     2 public:
     3     int jumpFloorII(int number) {
     4         int a = 1, b = 0;
     5         if (number < 0) {
     6             return -1;
     7         }
     8         for (int i = 2; i <= number; i++) {
     9             b = 2 * a;
    10             a = b;
    11         }
    12         return a;
    13     }
    14 };

    解法二:根据分析结果,可直接通过移位得到最终结果。

    1 class Solution {
    2 public:
    3     int jumpFloorII(int number) {
    4         return 1 << (number - 1);
    5     }
    6 };
  • 相关阅读:
    Linux下安装python
    oracle 12c使用问题总结
    oracle下载地址
    Informatica PowerCenter下载地址
    主流ETL工具
    【phonegap】下载文件
    eclipse显示包的层次关系
    UltraISO 9.6.5.3237
    Windows操作系统设置代理
    wireshark常用的过滤命令
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/10474392.html
Copyright © 2011-2022 走看看