[leetcode] Unique Paths II
2015-06-24 21:50
609 查看
From : https://leetcode.com/problems/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
in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
The total number of unique paths is
Note: m and n will be at most 100.
优化:
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
1and
0respectively
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.
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m=obstacleGrid.size(), n=obstacleGrid[0].size(); vector<vector<int>> steps(m, vector<int>(n, 0)); int flag = 1; for(int i=0; i<m; i++) { flag = flag&(!obstacleGrid[i][0]); steps[i][0] = flag; } flag = 1; for(int j=0; j<n; j++) { flag = flag&(!obstacleGrid[0][j]); steps[0][j] = flag; } for(int i=1; i<m; i++) { for(int j=1; j<n; j++) { steps[i][j] = (!obstacleGrid[i][j])*(steps[i-1][j]+steps[i][j-1]); } } return steps[m-1][n-1]; } };
优化:
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m=obstacleGrid.size(), n=obstacleGrid[0].size(); vector<int> res(n, 0); res[0] = !obstacleGrid[0][0]; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(obstacleGrid[i][j]) res[j]=0; else if(j>0) res[j] += res[j-1]; } } return res[n-1]; } };
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { if(obstacleGrid == null || obstacleGrid.length == 0) { return 0; } int m = obstacleGrid.length, n = obstacleGrid[0].length; int[] v = new int ; for(int i=0; i<n && obstacleGrid[0][i]==0; ++i) { v[i] = 1; } int flag = 1-obstacleGrid[0][0]; for(int i=1; i<m; ++i) { if(flag==0 || obstacleGrid[i][0]==1) { flag = 0; } v[0] = flag; for(int j=1; j<n; ++j) { v[j] = (1-obstacleGrid[i][j])*(v[j]+v[j-1]); } } return v[n-1]; } }
相关文章推荐
- ios UIView的常用属性
- UITextFiled使用总结
- Kaggle-ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
- 关于 UITextField
- ios UIButton的常用属性
- deque时间复杂度和vector,list比较
- IOS UILabel的常用属性
- Android属性之build.prop生成过程
- [leetcode] Unique Paths
- iOS学习笔记(3)UIButton
- UITextField隐藏键盘的几种方式
- Sicily 1443. Printer Queue
- 解决 Errors running builder 'DeploymentBuilder' on project ' .
- View requires API level 14 (current min is 8): <Switch>
- CSU 1658 IQ of XUEXX’s descendants 矩阵快速幂
- C# WebRequest WebClient Post请求Demo
- ZJU2136 Longest Ordered Subsequence
- iOS下载文件之NSData -UIImage
- UILabel和UITableview自定义分割线
- Bluemix云平台实践: CLI应用之DB2控制台(2)