LeetCode:63.不同路径2

和62题类似,增加了障碍物

递推方程变为:

    当(i, j) 为障碍物时:DP(i, j) = 0;

    当(i, j)不是障碍物时:DP(i, j) = DP(i-1, j) + DP(i, j-1);

注意第一列和第一行初始化的处理;比如第一行,只要前面有障碍物,后面的所有走法都是0

解法如下

public int uniquePathsWithObstacles(int[][] obstacleGrid) {

	int[][] dp = new int[obstacleGrid.length][obstacleGrid[0].length];
	
	boolean flagx = false;
	for(int i=0; i<obstacleGrid.length; i++) {
		if(obstacleGrid[i][0]==1 || flagx) {
			flagx = true;
			dp[i][0] = 0;
		} else {
			dp[i][0] = 1;
		}
	}
	
	boolean flagy = false;
	for(int j=0; j<obstacleGrid[0].length; j++) {
		if(obstacleGrid[0][j]==1 || flagy) {
			flagy = true;
			dp[0][j] = 0;
		} else {
			dp[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) {
				dp[i][j] = 0;
			} else {
				dp[i][j] = dp[i-1][j] + dp[i][j-1];
			}
		}
	}
	
	return dp[obstacleGrid.length-1][obstacleGrid[0].length-1];
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值