Leetcode63 Unique Paths II
来源:互联网 发布:android http网络协议 编辑:程序博客网 时间:2024/06/15 04:58
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.
Solution1
- 和上一道题思路一样,只是中间添加了一些障碍物,所以只是在障碍物的地方就要将其设为0.
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m = obstacleGrid.length; if(m==0) return 0; int n = obstacleGrid[0].length; if(n==0||obstacleGrid[0][0]==1) return 0; int[][] dp = new int[m][n]; dp[0][0] = 1; for(int i=1;i<n;i++) if(obstacleGrid[0][i]!=1) dp[0][i] += dp[0][i-1];//这里必须要从左边得到 for(int i=1;i<m;i++){ if(obstacleGrid[i][0]!=1) dp[i][0] = dp[i-1][0]; for(int j=1;j<n;j++){ if(obstacleGrid[i][j]==1) dp[i][j] = 0; else dp[i][j] = dp[i-1][j] + dp[i][j-1]; } } return dp[m-1][n-1]; }}
Solution2
- 用滚动数组
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m = obstacleGrid.length; if(m==0) return 0; int n = obstacleGrid[0].length; if(n==0||obstacleGrid[0][0]==1) return 0; int[] dp = new int[n]; dp[0] = 1; for(int i=1;i<n;i++) if(obstacleGrid[0][i]!=1) dp[i] = dp[i-1]; for(int i=1;i<m;i++){ if(obstacleGrid[i][0]==1) dp[0] = 0; for(int j=1;j<n;j++){ if(obstacleGrid[i][j]==1) dp[j] = 0; else dp[j] += dp[j-1]; } } return dp[n-1]; }}
0 0
- LeetCode63:Unique Paths II
- Leetcode63 Unique Paths II
- LeetCode63. Unique Paths II
- leetcode63-Unique Paths II
- Leetcode63. Unique Paths II
- Leetcode63: Unique Paths II
- leetcode63. Unique Paths II
- leetcode63. Unique Paths II
- LeetCode63 Unique Paths II
- leetcode63.[DP] Unique Paths II
- LeetCode63——Unique Paths II
- Unique Paths & Unique Paths II
- Unique Paths &&Unique Paths II
- Unique Paths & Unique Paths II
- Unique Paths & Unique Paths II
- LeetCode: Unique Paths II
- [Leetcode] Unique Paths II
- LeetCode : Unique Paths II
- C#中out和ref之间的区别
- hdu 5370 Tree Maker(catalan+dp)
- Command模式
- yield() sleep()wait()区别
- 第84讲:Scala中List和ListBuffer设计实现思考学习笔记
- Leetcode63 Unique Paths II
- internal 修饰符起什么作用?
- 不确定的问题 2015-8-12
- android控件--ViewPager原理及实现
- ViewDragHelper详解
- easy_install安装,更新模块 python
- HttpClientGet与HttpClientPost
- iPhone 6 / 6 Plus 设计·适配方案
- Cacti的安装与插件开发(一)