Unique Paths II 求在矩阵里从左上走到右下的总方法数(有障碍)@LeetCode

每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少 Unique Paths原题链接Unique Paths 计算从左上角有多少条不同的路径可以到达右下角,移动方向只能是向右和向下。对于每个位置,都有两种移动的可能,即向右移动和向下移动。可以用深度优先(dfs)解决,同时为了解决重复计算,可以用动态规划的思想,记录从dp[i][j]到达右下角有多少条不同的路径。除了深度优先之外,可以用迭代法执行动态规划,这样做可以减少dp的维度,只需要一维数组 阅读详情
package Level3;

/**
 * Unique Paths II 
 *
 * Follow up for "Unique Paths":

Now consider if some obstacles are added to the grids. How many unique paths would there be?

An obstacle and empty space is marked as 1 and 0 respectively in the grid.

For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.

[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
The total number of unique paths is 2.

Note: m and n will be at most 100.
 */
public class S63 {

	public static void main(String[] args) {

	}

	public int uniquePathsWithObstacles(int[][] obstacleGrid) {
		int m = obstacleGrid.length;
		int n = obstacleGrid[0].length;
		
		// DP数组用来存放到每一个格子时的路径数目
        int[][] cnt = new int[m][n];
        if(obstacleGrid[0][0] == 1){
        	cnt[0][0] = 0;
        }else{
        	cnt[0][0] = 1;
        }
        
        // corner case 如果最后一个点是obstacle则没有办法到达
        if(obstacleGrid[m-1][n-1] == 1){
        	return 0;
        }
        
        // 第一列的格子只有一种到达方式(向下)
        for(int i=1; i<m; i++){
        	if(obstacleGrid[i][0]!=1 && cnt[i-1][0]!=0){
        		cnt[i][0] = 1;
        	}
        }
        // 第一行的格子只有一种到达方式(向右)
        for(int i=1; i<n; i++){
        	if(obstacleGrid[0][i]!=1 && cnt[0][i-1]!=0){
        		cnt[0][i] = 1;
        	}
        }
        
        for(int i=1; i<m; i++){
        	for(int j=1; j<n; j++){
        		if(obstacleGrid[i-1][j] != 1){
        			cnt[i][j] += cnt[i-1][j];
        		}
        		if(obstacleGrid[i][j-1] != 1){
        			cnt[i][j] += cnt[i][j-1];
        		}
        	}
        }
        
        return cnt[m-1][n-1];
	}

}



public class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int[][] path = new int[obstacleGrid.length][obstacleGrid[0].length];
        for(int i=0; i<obstacleGrid.length; i++) {
            if(obstacleGrid[i][0] == 1) {
                break;
            }
            path[i][0] = 1;
        }
        for(int j=0; j<obstacleGrid[0].length; j++) {
            if(obstacleGrid[0][j] == 1) {
                break;
            }
            path[0][j] = 1;
        }
        
        for(int i=1; i<obstacleGrid.length; i++) {
            for(int j=1; j<obstacleGrid[0].length; j++) {
                if(obstacleGrid[i][j] == 1) {
                    continue;
                }
                if(obstacleGrid[i-1][j] != 1) {
                    path[i][j] += path[i-1][j];
                }
                if(obstacleGrid[i][j-1] != 1) {
                    path[i][j] += path[i][j-1];
                }
            }
        }
        
        return path[obstacleGrid.length-1][obstacleGrid[0].length-1];
    }
}










51nod1119 机器人走方格 组合数学 M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。 题目本身很简单,就是一个初中都推倒过的理论,只能向下或者向右的话,那么可能的路径一共有C(n+m,n)种。很好理解的这里就不说明了。现在我们要解决的是,当n和m都比较大的时候怎么讲结果计算出来。 #include 阅读详情

相关推荐

一种非常简单有效的基于格子的寻路算法

这种算法可能比A*要好啊,

__xzwdev__ 1万+

矩阵的左上角到右下角到路径数量,中间有障碍物

  Input: [   [0,0,0],   [0,1,0],   [0,0,0] ] Output: 2 Explanation: There is one obstacle in the middle of the 3x3 grid above. There are two ways to reach the bottom-right corner: 1. Right -&gt; Rig...

u010325193的博客 2173

NYOJ 第371题 机器人II

NYOJ 第371题 机器人II

不要必应的博客 762

Unique Paths 求在矩阵里从左上走到右下的总方法数@LeetCode

package Level2; /** * Unique Paths * * A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The robot can only move either down or right at any point

2550

告别手动归档:基于Allegro Skill的XTools一键生成Gerber与生产文件实践

本文详细介绍了基于Allegro Skill的XTools工具如何实现一键生成Gerber与生产文件,大幅提升PCB设计效率。通过自动化流程,解决了传统手动归档中的重复劳动、人为失误和标准不统一等问题,特别适合需要频繁输出生产文件的工程师。文章包含安装配置、实战操作、问题排查及进阶技巧,帮助用户快速掌握这一高效工具。

weixin_30505225的博客 460

反激开关电源设计全解析:从CCM/DCM原理到PCB布局实战

开关电源作为现代电子设备的能量转换核心,其核心原理是通过高频开关动作实现高效的电能变换。反激拓扑因其结构简单、成本低廉且易于实现电气隔离,成为小功率离线式电源的主流选择。其技术价值在于通过变压器耦合实现能量存储与传递,解决了安全隔离与多路输出等关键需求,广泛应用于充电器、适配器及家电供电等场景。本文聚焦反激电路,深入剖析其CCM与DCM两种工作模式的原理差异及选型考量,并结合伏秒平衡定律与RCD钳位等热词,详解从变压器计算到MOSFET选型的完整工程设计流程。

weixin_31951365的博客 342

leetcode:到达终点数字

题目 解答 var reachNumber = function(target) { let curTarget=0; let step=0; target=Math.abs(target); while(curTarget<target){ step++; curTarget+=step; } let dis=curTarget-...

weixin_43801564的博客 573

数学建模:相关性分析学习——皮尔逊(pearson)相关系数与斯皮尔曼(spearman)相关系数

相关性分析:求解相关系数并绘制热力图进行对比

weixin_67565775的博客 8万+

给定一个8*8的方格子,A点到B点的最短路径有多少条?

题目:给定一个8*8的方格子,如下图所示,求A点到B点的最短路径有多少条?用算法实现。(回溯法) 广度优先搜索只能找出一条最短路径     答:从图中可以看出,A点到B点的最短路径为16,即A点横走8小格,纵走8小格才能最快到达B点,这是排列组合的问题,即从最短路径16中选取8个横走的小格子(或者从最短路径16中选取8个纵走的小格子)。所以从A点到B点的最短路径条数,直接

小_鱼的专栏 2万+

AltiumDesigner 09安装过程破解问题 .

首先分享一下破解文件,网上总是下载不到,好不容易下载到了,放在网盘上,有需要的自取。AltiumDesigner 09破解文件。链接:https://pan.baidu.com/s/1ZGvbR_6T51hpcaFbQiMX5w 密码:qwvaAltiumDesigner 09安装安装文件,比较大,包含破解文件:链接:https://pan.baidu.com/s/1mfgragB519jpGfR...

xiaoxiao_rabbit的博客 3万+

Open FPV VTX与Betaflight的MSP协议配置详解:从硬件连接到OSD显示

本文详细解析了如何通过MSP协议将Open FPV VTX与Betaflight飞控进行深度集成,实现飞行数据在OSD上的稳定显示。内容涵盖从硬件连接、Betaflight端口MSP服务启用,到VTX侧配置与OSD元素布局调校的全流程,并提供了常见问题的排查思路,帮助FPV玩家构建可靠的数据叠加系统。

weixin_29201933的博客 452

从左上角走到右下角的走法数量(中间有障碍)

Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as1and0respectively in the grid. For...

ZWB626的博客 2488

基于STM32的智能鞋柜系统设计与实现

摘要:本文设计并实现了一种基于STM32F103C8T6单片机的智能鞋柜系统。该系统通过DHT11温湿度传感器、PM2.5粉尘传感器和MQ-135空气质量传感器构建多维度环境监测网络,结合光电红外传感器和光敏传感器实现柜门状态识别与智能照明。系统采用分层控制策略,当温度低于15℃或湿度高于65%时自动启动加热和通风,PM2.5超标时启动通风,污染物浓度升高时激活紫外线杀菌。创新性地实现了柜门状态与紫外线消毒的双保险互锁机制,确保使用安全。测试结果表明,系统温湿度控制精度达±0.4℃/±2.0%RH,PM2.

3254968421的博客 252

LeetCode - 63. Unique Paths II(有障碍物的不同路径)

LeetCode-63. Unique Paths II(有障碍物的不同路径) 记忆化 二维dp 一维dp 题目链接 题目 记忆化 其实这类题目都是比较套路的,例如LeetCode62,就是一点点改造而已。 记忆化就是递归加上一个二维数组的记录: public int[][] map; public int uniquePathsWithOb...

zxzxin的博客~ 1338

android13删除录屏权限提示框-去除录屏提示

在Android 13中,当应用请求屏幕录制权限时,系统会弹出一个权限提示框,要求用户明确授权。这个提示框是为了增强用户隐私保护,让用户知道有应用尝试录制屏幕。但是,在某些情况下,开发者可能希望避免显示这个提示框,以提供更流畅的用户体验。本文将介绍如何在Android 13中删除录屏权限提示框。

zhutoubenben的专栏 1880

五.EtherCAT开发之STM32F407ZGt6+ LAN9253 外置EEPROM配置数据含义

EtherCAT从站简称ESC,ESC在上电过程中,会自动加载EEPROM中前7个字(1word = 2 byte)到ESC寄存器。ESC寄存器总是可以被EtherCAT主站通过EtherCAT总线访问,无论PDI接口寄存器配置什么值。EEPROM存储器中的前7个字,将决定ESC的工作模式。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 3466

Leetcode 春季赛:从始点到终点的所有路径(超详细的解法!!!)

给定有向图的边 edges,以及该图的始点 source 和目标终点 destination,确定从始点 source 出发的所有路径是否最终结束于目标终点 destination,即: 从始点 source 到目标终点 destination 存在至少一条路径 如果存在从始点 source 到没有出边的节点的路径,则该节点就是路径终点。 从始点source到目标终点 destination 可...

coordinate的博客 4004

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode-62-Unique Paths

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The robot can only move either down or right at any point in time. The robot is trying to reach the

八行书 436

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Leetcode 62. Unique Paths & 63. Unique Paths II

好久没刷题了,今天来俩道简单题。 Leetcode 62. Unique Paths Leetcode 63. Unique Paths IIA robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below). The robot can only move either

xindoo 1764

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

第十天:《LeetCode一天一例》-----矩形从左上角到右下角找最短路(python实现)

矩形从左上角到右下角找最短路 题目: 如下图: 从起点出发,只能想右或者向下走,然后走到终点。。方框里面的数值代表代价,我们要找一条代价比较小的路径。。怎样做呢? 快去想想。。 分析: 动态规划走起 i 代表行, j 代表列,我们走一步,累加一步,然后进行选择。 下面分情况: ...

shawroad的博客 3240

剑指offer:矩阵中的路径 (leetcode:单词搜索)

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字...

u012991043的博客 1448

LeetCode(63)UniquePath2

题目如下: Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the

BUILD 1725

三道算法小题

题目1:大小为N的数组,其主元素是一个出现超过N/2次的元素(一个数组可能没有主元素)。为求出数组的主元素(若没有主元素时需要指出来),设计至少2种算法,并分析算法的复杂度。 算法1:遍历数组中的每一个元素,并对各个元素的个数计数,遍历过的元素可存入另一个数组,以减少计算量。最坏情形下,此算法需要计算N*(2+2*N)次,因此算法是O(n^2)的。这个算法简单直观,符合一般想法,缺点是时间...

login_at_march_13的博客 370

带障碍的迷宫路径问题

问题: 一个二维矩阵n*m,中间有许多障碍点,从点(0,0)出发,问到达(n-1,m-1)所有的路径有多少条,障碍点不能经过。 输入n m k,表示矩阵行列值以及障碍点的个数,接下来k行表示输入障碍点的位置。 输出路径条数。 public class Main{ static int res = 1; public static void main(String[] args) { ...

大鹏视界U 1099

矩阵从左上角向右下角走,每次只能向右或者向下移动,求经过最小的路径

先通过动态规划求出最小路径的值,然后根据dp二维数组倒推所走路径。参考找出最大公共子序列解法。 #include<iostream> #include<vector> #include<algorithm> using namespace std; int minsum(vector<vector<int>>a...

weixin_30646315的博客 1630
上一篇: Unique Paths 求在矩阵里从左上走到右下的总方法数@LeetCode
下一篇: Jump Game II 跳跃游戏(求跳到最后一个的最小步数) @LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值