标签:
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.
思路:
简单的动态规划
我的代码:
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { if(obstacleGrid == null || obstacleGrid.length == 0 || obstacleGrid[0].length == 0) return 0; int m = obstacleGrid.length; int n = obstacleGrid[0].length; if(obstacleGrid[0][0] == 1) obstacleGrid[0][0] = 0; else obstacleGrid[0][0] = 1; for(int k = 1; k < m; k++) { if(obstacleGrid[k][0] != 1) obstacleGrid[k][0] = obstacleGrid[k-1][0]; else obstacleGrid[k][0] = 0; } for(int k = 1; k < n; k++) { if(obstacleGrid[0][k] != 1) obstacleGrid[0][k] = obstacleGrid[0][k-1]; else obstacleGrid[0][k] = 0; } for(int i = 1; i < m; i++) { for(int j = 1; j < n; j++) { if(obstacleGrid[i][j] == 1) { obstacleGrid[i][j] = 0; } else { obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1]; } } } return obstacleGrid[m-1][n-1]; } }
别人代码:
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { if (obstacleGrid == null || obstacleGrid.length == 0 || obstacleGrid[0].length == 0) { return 0; } int n = obstacleGrid.length; int m = obstacleGrid[0].length; int[][] paths = new int[n][m]; for (int i = 0; i < n; i++) { if (obstacleGrid[i][0] != 1) { paths[i][0] = 1; } else { break; } } for (int i = 0; i < m; i++) { if (obstacleGrid[0][i] != 1) { paths[0][i] = 1; } else { break; } } for (int i = 1; i < n; i++) { for (int j = 1; j < m; j++) { if (obstacleGrid[i][j] != 1) { paths[i][j] = paths[i - 1][j] + paths[i][j - 1]; } else { paths[i][j] = 0; } } } return paths[n - 1][m - 1]; } }
学习之处:
标签:
原文地址:http://www.cnblogs.com/sunshisonghit/p/4332874.html