zoukankan      html  css  js  c++  java
  • 爬楼梯问题-斐波那契序列的应用.md

      1. N 阶楼梯,一次可以爬1、2步,求爬楼梯的种类数 ------ 斐波那契序列
      1. 变形:N 阶楼梯,一次可以爬1、2、3...n步,求爬楼梯的种类数 ------- 2的阶乘
    
    /**
     * 一次爬12步,所求结果是斐波那契序列
     *
     */
    public class ClimbingStairs {
        // Sol 1: 递归 ,超时
        // 递归 公式:F(n) = F(n - 1) + F(n - 2),n>=2; F(1) = 1, F(0) = 0;
        // Time: O(1.618 ^ n) Space: O(n) 空间复杂度取决于递归的深度
        public int climbStairs1(int n) {
            if (n < 2)
                return 1;
            else
                return climbStairs1(n - 1) + climbStairs1(n - 2);
        }
    
        // Sol 2: 迭代
        // Time: O(n) Space: O(1)
        public int climbStairs(int n) {
            int prev = 0, curr = 1;
            for (int i = 0; i < n; i++) {
                int tmp = curr;
                curr += prev;
                prev = tmp;
            }
            return curr;
        }
    
        // Sol 3: 数学公式, 见笔记
        // Time: O(n) Space: O(1)
        public int climbStairs3(int n) {
            final double s = Math.sqrt(5);
            return (int) ((Math.pow((1 + s) / 2, n + 1) - Math.pow((1 - s) / 2, n + 1)) * (1.0 / s));
        }
    
        /**
         * 变形:如果每次可怕的步数是123...
    
         * f(1) = 1
         * f(2) = 2
         * f(3) = 4
         * f(4) = 8
         * f(5) = 32
         * f(6) = 64
         * f(n) = f(n-1) + f(n-2) + ... + f(2) + f(1)
         */
        public int climStainrsN(int n) {
            int result = 1;
            for (int i = 1; i < n; i++) {
                result = result * 2;
            }
            return result;
        }
    
        public static void main(String[] args) {
            ClimbingStairs sol = new ClimbingStairs();
            for (int i = 1; i <= 6; i++) {
                System.out.println("n = " + i + ", step =" + sol.climStainrsN(i));
            }
        }
    
    
    }
    
    
    
  • 相关阅读:
    Python之面向对象新式类和经典类
    Python之面向对象继承和派生
    Python之面向对象类和对象
    Python之面向对象的程序设计
    Python之面向对象函数式编程
    Python之内置函数
    列表解析与生成器表达式
    03: 交换机基本原理与配置
    02: 网络布线与数制转换
    01:数据封装解封的过程
  • 原文地址:https://www.cnblogs.com/byrhuangqiang/p/6701028.html
Copyright © 2011-2022 走看看