动态规划算法入门之爬楼梯系列

目录

509.斐波那契数

70.爬楼梯

746.最小花费爬楼梯

爬楼梯PLUS


509.斐波那契数

思路:递归可以直接秒,但时间复杂度是O(2^n),动态规划迭代只用O(n)

class Solution {
    public int fib(int n) {
        if(n==0)return 0;
        if(n==1)return 1;
        int a=0,b=1;
        int sum=a+b;
        for(int i=2;i<=n;i++){
            sum=a+b;
            a=b;
            b=sum;
        }
        return sum;
    }
}
70.爬楼梯

题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思路:到n阶的楼梯的方法数=到n-1阶的方法数+到n-2阶的方法数

代码:同上了,变成斐波那契数了

746.最小花费爬楼梯

题目:

动态规划算法入门之爬楼梯系列_第1张图片

思路:第一反应是递归,如何把递归的时间复杂度缩小?建立动态规划的数组dp记录到每一阶楼梯的最少用时。

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int[] dp=new int[cost.length+1];
        dp[0]=0;
        dp[1]=0;
        for(int i=2;i<=cost.length;i++){
            int c1=dp[i-2]+cost[i-2];
            int c2=dp[i-1]+cost[i-1];
            dp[i]=Math.min(c1,c2);
        }
        return dp[cost.length];
    }
}
爬楼梯PLUS

动态规划算法入门之爬楼梯系列_第2张图片

import java.util.Scanner;

class Main{
    public static void main (String[] args) {
        /* code */
        Scanner sc= new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        System.out.println( calCost(m,n));
    }
    public static int calCost(int m,int n){
        int[] dp=new int[n];
        //初始化dp
        dp[0]=1;
        for(int i=1;i=0;j--){
                dp[i]+=dp[j];
            }
        }
        //动态规划
        for(int i=m;i

你可能感兴趣的:(数据结构与算法,leetcode,算法,数据结构,动态规划,java)