首页 > 编程语言 >算法学习day39动态规划part02-62、63

算法学习day39动态规划part02-62、63

时间:2023-06-01 23:45:25浏览次数:47  
标签:obstacleGrid day39 int part02 网格 ++ 62 public dp

package LeetCode.DPpart02;
/**
 * 62. 不同路径
 * 一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。
 * 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
 * 问总共有多少条不同的路径?
 * 示例:
 * 输入:m = 3, n = 7
 * 输出:28
 * */
public class UniquePaths_62 {
    public static void main(String[] args) {
        int m = 3;
        int n = 7;
        int result = uniquePaths(m,n);
        System.out.println(result);
    }
    public static int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n];
        //初始化
        for (int i = 0; i < m; i++) {
            dp[i][0] = 1;
        }
        for (int i = 0; i < n; i++) {
            dp[0][i] = 1;
        }

        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i-1][j]+dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
    }

}
package LeetCode.DPpart02;
/**
 * 63. 不同路径 II
 * 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
 * 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
 * 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
 * 网格中的障碍物和空位置分别用 1 和 0 来表示。
 * 示例:
 * 输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
 * 输出:2
 * 解释:3x3 网格的正中间有一个障碍物。
 * 从左上角到右下角一共有 2 条不同的路径:
 * 1. 向右 -> 向右 -> 向下 -> 向下
 * 2. 向下 -> 向下 -> 向右 -> 向右
 * */

public class UniquePathsII_63 {
    public static void main(String[] args) {
        int[][] obstacleGrid = {{0,0,0},{0,1,0},{0,0,0}};
        int result = uniquePathsWithObstacles(obstacleGrid);
        System.out.println(result);
    }
    public static int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m][n];

        //如果在起点或终点出现了障碍,直接返回0
        if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) {
            return 0;
        }

        for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) {
            dp[i][0] = 1;
        }
        for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) {
            dp[0][j] = 1;
        }

        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = (obstacleGrid[i][j] == 0) ? dp[i - 1][j] + dp[i][j - 1] : 0;
            }
        }
        return dp[m - 1][n - 1];
    }

}

 

标签:obstacleGrid,day39,int,part02,网格,++,62,public,dp
From: https://www.cnblogs.com/lipinbigdata/p/17450547.html

相关文章

  • HDU3662(求三维凸包表面的多边形个数,表面三角形个数,体积,表面积,凸包重心,凸包中点到面
    题目:3DConvexHull题意:给定空间中的n个点,求这n个点形成的凸包的表面的多边形个数。增量法求解:首先任选4个点形成的一个四面体,然后每次新加一个点,分两种情况:1>在凸包内,则可以跳过2>在凸包外,找到从这个点可以"看见"的面S(看不看得见可以用法向量,看点是否在面外侧),删除这些......
  • POJ2762(判断无向图的弱连通)
    题目:http://poj.org/problem?id=2762 题意:给出n个山洞,对于每个山洞,如果任意选择两点s,e,都满足s可以到达e或者e可以到达s,则输出Yes,否则输出No。 分析:实际上判断是否弱连通,所以首先强连通,然后缩点,对缩点形成的图最多只能有一个入度为0的点,如果有多个入度为0的点,则这两个连通分量肯......
  • 约瑟夫环(动态规划):剑指 Offer 62. 圆圈中最后剩下的数字
    题目描述:0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下......
  • 算法学习day32贪心part02-122、55、45
    packageLeetCode.greedypart02;/***122.买卖股票的最佳时机II*给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。*在每一天,你可以决定是否购买和/或出售股票。*你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。*返......
  • 代码随想录算法训练营第15天 | ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉
     第六章二叉树 part02 今日内容:  ●  层序遍历  10 ●  226.翻转二叉树 ●  101.对称二叉树 2    详细布置   层序遍历  看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。 题目链接/文章讲解/视频讲解:htt......
  • poj 2362(剪枝)
    题意:给定一堆不定长度的小棒子,问他们能否构成一个正方形。解题思路:最开始写的时候把题意弄错了,以为只要能够从中取出一部分构成矩形即可。。。。这里注意一下几个剪枝的地方:1)要把所有的棒子都用上且组成正方形,那么sum%4=0;2)如果棒子长度小于4,肯定是不行的3)如果棒子中有长度大于s......
  • upc 6621: HSI(数学期望,数学推导能力)
    6621:HSI时间限制:1Sec  内存限制:128MB提交:544  解决:112[提交][状态][讨论版][命题人:admin]题目描述Takahashiisnowcompetinginaprogrammingcontest,buthereceivedTLEinaproblemwheretheanswerisYESorNO.Whenhecheckedthedetaileds......
  • 【蓝桥杯集训·每日一题】AcWing 3625. 幂次方
    写在前面本人CSDN博客主页:这里一、题目1、原题链接3625.幂次方2、题目描述对任意正整数N,计算XNmod233333的值。输入格式共一行,两个整数X和N。输出格式共一行,一个整数,表示XNmod233333的值。数据范围1≤X,N≤109输入样例:25输出样例:32二、解题报告1、思路分析(1)快速幂模板题......
  • 力扣 662 https://leetcode.cn/problems/maximum-width-of-binary-tree/
    需要了解树的顺序存储如果是普通的二叉树,底层是用链表去连接的如果是满二叉树,底层用的是数组去放的,而数组放的时候会有索引对应当前父节点是索引i,下一个左右节点就是2i,2i+1利用满二叉树的索引特征所以需要对每个节点进行一个索引赋值,赋值在队列中,队列用数组表示核心代码......
  • 时代的眼泪:CF1562A The Miracle and the Sleeper 题解 2021-09-23 23:00:33
    CF1562ATheMiracleandtheSleeper题解笑死,晚上熬夜打CF比赛只过了A题还加了CF值!?由于本人太弱,这道橙题都干了1h题目描述有\(T\)组数据,给出一个区间\([l,r]\),在这个区间中选择2个数a,b,使它们a%b的值最大.注意:\(l\ler\le10^9\),\(T\le10^3\)解题步骤暴力......