63. Unique Paths II
来源:互联网 发布:网络安全保密协议 编辑:程序博客网 时间:2024/05/17 00:58
题目:
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.
题意:
与Unique Paths题目类似,本题中包含一些阻碍,有阻碍的地方不能经过。空间复杂度O(m*n);
class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); vector<vector<int>> result(m+1, vector<int>(n+1, 0)); result[0][1] = 1; for(int i=1; i<=m; i++){ for(int j=1; j<=n; j++){ if(!obstacleGrid[i-1][j-1]){ result[i][j] = result[i-1][j] + result[i][j-1]; } } } return result[m][n]; }};优化空间复杂度,没有使用m*n大小的数组存储所有元素的可到达路径数,使用了两个小数组。
代码:
class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); vector<int> pre(m, 0); vector<int> cur(m, 0); for(int i=0; i<m; i++){ if(!obstacleGrid[i][0]){ pre[i] = 1; }else{ break; } } for(int j=1; j<n; j++){ bool flag = false; if(!obstacleGrid[0][j]){ cur[0] = pre[0]; if(cur[0]){ flag = true; } }else{ cur[0] = 0; } for(int i=1; i<m; i++){ if(!obstacleGrid[i][j]){ cur[i] = cur[i-1] + pre[i]; if(cur[i]){ flag = true; } }else{ cur[i] = 0; } } if(!flag){ return 0; } swap(pre, cur); } return pre[m-1]; }};再次优化空间复杂度。使用一个小数组存储必要的数。
class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); vector<int> cur(m, 0); for(int i=0; i<m; i++){ if(!obstacleGrid[i][0]){ cur[i] = 1; }else break; } for(int j=1; j<n; j++){ bool flag = false; if(obstacleGrid[0][j]){ cur[0] = 0; }else flag = true; for(int i=1; i<m; i++){ if(!obstacleGrid[i][j]){ cur[i] += cur[i-1]; if(cur[i]){ flag = true; } }else cur[i] = 0; } if(!flag){ return 0; } } return cur[m-1]; }};
0 0
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 63. Unique Paths II
- 【图】:有向图中两点间的路径
- 通过VBA将excel数据导入至word文档
- 【安卓中的缓存策略系列】安卓缓存之内存缓存LruCache
- Spring MVC 框架搭建及详解
- EF 事务
- 63. Unique Paths II
- android 混淆
- beautifulsoup 安装
- MyBatis学习总结(一)--MyBatis快速入门
- vi编辑器(2)
- Logstash之时区问题的建议和修改
- MFC Invalidate闪屏问题
- struts2后台传值3种方法
- Android Studio生成jar包的方法