zoukankan      html  css  js  c++  java
  • [编程题] 基础 【动态规划】与练习-爬楼梯

    [编程题] 基础 【动态规划】与练习-爬楼梯

    知识点

    1、基础

    image-20200730150942845

    2、斐波那契数列例子

    普通递归:

    image-20200730151623823

    递归加记忆化

    image-20200730151651407

    那么从树的下边往上推的话,顺推上去没救得到了状态转移方法。

    image-20200730151915995


    案例1:爬楼梯

    回溯的方法

    回溯的思想是,我们如果是想到达第n台阶f(n)的话,那么就是从f(n-1)跳上来,也可以是从f(n-2)跳上来。即

    f(n) = f(n-1) + f(n-2)

    f(0) = f(1) = 1

    动态规划

    for(int i=2;i<n;i++){

    ​ f[n] = f[n-1] + f[n-2];

    }

    总结:动态规划dp转移方程状态定义;dp转移方程

    Java办法的几种代码

    import java.util.*;
    class Solution {
    
        //方法1:递归:(时间超过限制)
        public int climbStairs1(int n) {
            //方法1:普通递归的方法进行
            if(n==1 ||n==2) {
                return n;
            }else{
                return climbStairs(n-1)+climbStairs(n-2);
            }
        }
    
        //方法2:动态规划(空间换时间)
         public int climbStairs2(int n) {
            if(n<=2){return n;}
            //n>=3的情况使用dp处理
            int[] dp =  new int[n+1];
            dp[1] = 1;
            dp[2] = 2;
            for(int i=3;i<=n;i++){
                dp[i] = dp[i-1]+dp[i-2];
            }
            return dp[n];
         }
    
        
    
         //方法3:滑动数组的方式(从左往右滑)
         public int climbStairs3(int n) {
             int p = 0;   //pre节点指针
             int q = 1;  //相当于n=1的情况的指针
             int r = 2;  //相当于n=2的情况的指针
             for(int i=1;i<n;i++){  //传入2,只需要移动1次,传入3,只需移动2次
                 p = q;
                 q = r;
                 r = p+q;
             }
             return q;
        }
    
        //方法4:使用斐波那契公式计算
        public int climbStairs6(int n) {
            double sqrt5 = Math.sqrt(5);
            int res = (int)((1/sqrt5)*(Math.pow((1+sqrt5)/2,n+1)-Math.pow((1-sqrt5)/2,n+1)));
            return res;
        }
    
    }
    
  • 相关阅读:
    extend()和append()区别
    extend()和append()区别
    extend()和append()区别
    extend()和append()区别
    Ethtool工具源码剖析
    [数据库基础]——索引
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13404612.html
Copyright © 2011-2022 走看看