leetcode:Unique Paths II
2016-03-15 16:36
417 查看
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.
Subscribe to see which companies asked this question
一个更有效率的解法:
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.
Subscribe to see which companies asked this question
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { vector<vector<int>> dp(obstacleGrid.size(), vector<int>(obstacleGrid[0].size())); dp[0][0] = obstacleGrid[0][0] == 1? 0:1; for (int i=1; i<obstacleGrid.size(); i++) { if (obstacleGrid[i][0] == 1) { dp[i][0] = 0; } else { dp[i][0] = dp[i-1][0]; } } for (int j=1; j<obstacleGrid[0].size(); j++) { if (obstacleGrid[0][j] == 1) { dp[0][j] = 0; } else { dp[0][j] = dp[0][j-1]; } } for (int i=1; i<obstacleGrid.size(); i++) { for (int j=1; j<obstacleGrid[0].size(); 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.size()-1][obstacleGrid[0].size()-1]; } };
一个更有效率的解法:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int h = obstacleGrid.size(); if(h == 0) return 0; int w = obstacleGrid[0].size(); if(w == 0) return 0; if(obstacleGrid[0][0]) return 0; // first cell has 1 path obstacleGrid[0][0] = 1; // first row all are '1' until obstacle (from left only) for(int i=1; i<w; i++){ obstacleGrid[0][i] = obstacleGrid[0][i] ? 0 : obstacleGrid[0][i-1]; } for(int j=1; j<h; j++){ // first column is like first row (from top only) obstacleGrid[j][0] = obstacleGrid[j][0] ? 0 : obstacleGrid[j-1][0]; // others are up+left for(int i=1; i<w; i++){ obstacleGrid[j][i] = obstacleGrid[j][i] ? 0 : obstacleGrid[j-1][i] + obstacleGrid[j][i-1]; } } return obstacleGrid[h-1][w-1]; }
相关文章推荐
- EasyUI加载树控件自动展开所有目录
- requireJS 简单上手
- easyui reload方法报Cannot read property 'options' of undefined
- RecyclerView_QuickAdapter及相关封装简化
- STL中vector、list、deque和map的区别
- oc--UINavigationController控制器
- quick 3.3 按钮多次点击出现问题的解决
- Android UI-仿微信底部导航栏布局
- String、StringBuffer和StringBuilder的区别
- HD2767Proving Equivalences(有向图强连通分量+缩点)
- android opencv build.gradle
- leetcode:N-Queens II 【Java】
- Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead
- leetcode:N-Queens 【Java】
- iOS-UIView 之 layoutMargins & preservesSuperviewLayoutMargins 解惑
- 10个顶级的CSS UI开源框架
- getBuiltInDisplay
- 158.Which statements are true regarding the FOR UPDATE clause in a SELECT statement? (Choose all tha
- NSBundleResourceRequest
- iOS 7及以上,随时改变UIStatusBar颜色