【leetcode】63. (Medium)Unique Pathes II

本文详细解析了在存在障碍的情况下寻找从起点到终点的唯一路径数量的算法。通过动态规划的方法,初始化边界条件并逐步计算可达路径数,最终得出解决方案。代码实现清晰,适合算法学习者深入理解。

解题思路:
和Unique Path差不多


提交代码:

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
    	int m=obstacleGrid.length;int n=obstacleGrid[0].length;
    	int[][] dp=new int[m][n];
    	
    	// initialize the bottom row
    	for(int i=n-1;i>=0;i--) {
    		if(obstacleGrid[m-1][i]==1) {
    			for(int j=i;j>=0;j--)
    				dp[m-1][j]=-1;
    			break;
    		}
    		dp[m-1][i]=1;
    	}

    	// initialize the right column
    	for(int i=m-1;i>=0;i--) {
    		if(obstacleGrid[i][n-1]==1) {
    			for(int j=i;j>=0;j--)
    				dp[j][n-1]=-1;
    			break;
    		}
    		dp[i][n-1]=1;
    	}
    	
    	for(int i=m-2;i>=0;i--) {
    		for(int j=n-2;j>=0;j--) {
    			if(obstacleGrid[i][j]==1) {
    				dp[i][j]=-1;
    				continue;
    			}
    			
    			dp[i][j]=0;
    			if(dp[i+1][j]!=-1)		dp[i][j]+=dp[i+1][j];
    			if(dp[i][j+1]!=-1)		dp[i][j]+=dp[i][j+1];
    		}
    	}
    	return dp[0][0]>0?dp[0][0]:0;
    }
}

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值