zoukankan      html  css  js  c++  java
  • 70. Climbing Stairs

    原题链接:https://leetcode.com/problems/climbing-stairs/description/
    实现如下:

    /**
     * Created by clearbug on 2018/2/26.
     */
    public class Solution {
    
        public static void main(String[] args) {
            Solution s = new Solution();
            System.out.println(s.climbStairs1(1));
            System.out.println(s.climbStairs1(2));
            System.out.println(s.climbStairs1(3));
            System.out.println(s.climbStairs1(4));
            System.out.println(s.climbStairs1(5));
            System.out.println(s.climbStairs1(44));
            System.out.println(s.climbStairs2(1));
            System.out.println(s.climbStairs2(2));
            System.out.println(s.climbStairs2(3));
            System.out.println(s.climbStairs2(4));
            System.out.println(s.climbStairs2(5));
            System.out.println(s.climbStairs2(44));
            System.out.println(s.climbStairs3(1));
            System.out.println(s.climbStairs3(2));
            System.out.println(s.climbStairs3(3));
            System.out.println(s.climbStairs3(4));
            System.out.println(s.climbStairs3(5));
            System.out.println(s.climbStairs3(44));
            System.out.println(s.climbStairs4(1));
            System.out.println(s.climbStairs4(2));
            System.out.println(s.climbStairs4(3));
            System.out.println(s.climbStairs4(4));
            System.out.println(s.climbStairs4(5));
            System.out.println(s.climbStairs4(44));
        }
    
        /**
         * 方法一:分解问题 + 递归
         *
         * @param n
         * @return
         */
        public int climbStairs1(int n) {
            if (n == 1) {
                return 1;
            }
            if (n == 2) {
                return 2;
            }
    
            return climbStairs1(n - 1) + climbStairs1(n - 2);
        }
    
        /**
         * 方法二:倒置方法一,避免深层递归
         *
         * @param n
         * @return
         */
        public int climbStairs2(int n) {
            if (n == 1) {
                return 1;
            }
            if (n == 2) {
                return 2;
            }
            int n1 = 2, n2 = 1;
            for (int i = 3; i < n; i++) {
                int curr = n1 + n2;
                n2 = n1;
                n1 = curr;
            }
            return n1 + n2;
        }
    
        /**
         * 官方答案一:使用组合排序,遍历所有走法,暴力却低效
         */
        public int climbStairs3(int n) {
            return climbStairs3Helper(0, n);
        }
    
        private int climbStairs3Helper(int start, int n) {
            if (start > n) {
                return 0;
            }
            if (start == n) {
                return 1;
            }
    
            return climbStairs3Helper(start + 1, n) + climbStairs3Helper(start + 2, n);
        }
    
        /**
         * 官方答案二:在方法一的基础上加上一个数组来记录已经递归过的答案,避免了重复递归的低效
         */
        public int climbStairs4(int n) {
            int[] memo = new int[n];
    
            return climbStairs4Helper(0, n, memo);
        }
    
        private int climbStairs4Helper(int start, int n, int[] memo) {
            if (start > n) {
                return 0;
            }
            if (start == n) {
                return 1;
            }
    
            if (memo[start] > 0) {
                return memo[start];
            }
    
            memo[start] = climbStairs4Helper(start + 1, n, memo) + climbStairs4Helper(start + 2, n, memo);
            return memo[start];
        }
    
        // 官方方法三:动态规划,跟我的方法一和方法二类似
        // 官方方法四:斐波那契数列方法,跟我的方法二基本上是一样的
        // 官方方法五和六涉及到斐波那契数列的一个公式推导的问题,由于这一块我目前不熟悉,那这两种方法后续再学习吧!
    }
    

    参考

    http://www.sohu.com/a/153858619_466939?p=wechat

  • 相关阅读:
    【学相伴】Nginx最新教程通俗易懂-狂神说
    Linux基础知识总结(命令行)
    CentOS7 运维
    Linux 的基础知识回顾(安装vmware) ---- No.1 后面都以Centos8 为例
    Linux sudo权限提升漏洞(CVE-2021-3156)
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    矩阵的范数
    函数导出在kvm_intel.ko,kvm.ko不共享
    python 调用内部类的两种方法
    python3 字符串方法
  • 原文地址:https://www.cnblogs.com/optor/p/8582614.html
Copyright © 2011-2022 走看看