自学内容网 自学内容网

LeetCode_Java_动态规划系列(1)(题目+思路+代码)

目录

斐波那契类型

746.使用最小花费爬楼梯

 矩阵

120. 三角形最小路径和


斐波那契类型

746.使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。

示例 1:

输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。
- 支付 15 ,向上爬两个台阶,到达楼梯顶部。
总花费为 15 。

示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。
- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
- 支付 1 ,向上爬一个台阶,到达楼梯顶部。
总花费为 6 。

思路:

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int arr[] = new int[cost.length];
        arr[0] = cost[0];
        arr[1] = cost[1];
        for(int i = 2; i < cost.length; i++){
            arr[i] = Math.min(arr[i-1],arr[i-2])+cost[i];
        }
        return Math.min(arr[cost.length-2],arr[cost.length-1]);
    }
}

 矩阵

120. 三角形最小路径和

给定一个三角形 triangle ,找出自顶向下的最小路径和。

每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 ii + 1

自底向上:

在执行最后一行之后,dp[]的每个下标都有对应的值

以此类推:

遍历结果之后,dp[0]会存储每次相邻的数之间的最小值,直接返回dp[0]即可

class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        int[] dp = new int[triangle.size()+1]; //triangle.size()表triangle的大小
        for(int row = triangle.size() - 1; row >= 0 ; row--){
            for(int i = 0; i <=row; i++){
                dp[i] = Math.min(dp[i],dp[i+1])+triangle.get(row).get(i); //triangle.get(row).get(i)获取当前行下标为i的元素
            }
        }
        return dp[0];
    }
}


原文地址:https://blog.csdn.net/weixin_53415203/article/details/136252069

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!