leetcode: Unique Paths II
2014-06-26 21:26
267 查看
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.
AC,还是得动态规划,dp[i][j] = dp[i-1][j] + dp[i][j-1],注意加前先判断对应ob是不是为1,为1的就不加
TLE
递归太慢
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] ]
AC,还是得动态规划,dp[i][j] = dp[i-1][j] + dp[i][j-1],注意加前先判断对应ob是不是为1,为1的就不加
class Solution { public: int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) { if( obstacleGrid[0][0] || obstacleGrid[obstacleGrid.size()-1][obstacleGrid[0].size()-1])//如果左上角和右下角为1,那就肯定到不了了 return 0; vector< vector< int > > dp( obstacleGrid.size(), vector< int>( obstacleGrid[0].size(), 0)); int i = 0; for( ; i < obstacleGrid.size(); ++i){//ob[i][0]里为1,初始化时候,dp对应位子后面就都是0,因为只有一条路,有一个障碍就后面都到不了 if( obstacleGrid[i][0]) break; } for( int j = 0; j < i; ++j) dp[j][0] = 1; i = 0; for( ; i < obstacleGrid[0].size(); ++i){//同理 if( obstacleGrid[0][i]) break; } for( int j = 0; j < i; ++j) dp[0][j] = 1; for( i = 1; i < obstacleGrid.size(); ++i){ for( int j = 1; j < obstacleGrid[0].size(); ++j){ if( obstacleGrid[i-1][j] && obstacleGrid[i][j-1]) dp[i][j] = 0; else if( obstacleGrid[i-1][j]) dp[i][j] = dp[i][j-1]; else if( obstacleGrid[i][j-1]) dp[i][j] = dp[i-1][j]; else dp[i][j] = dp[i-1][j] + dp[i][j-1]; } } return dp[obstacleGrid.size()-1][obstacleGrid[0].size()-1]; } };
TLE
递归太慢
class Solution { private: int cnt = 0; public: int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) { core( obstacleGrid, 0, 0, obstacleGrid.size(), obstacleGrid[0].size()); return cnt; } void core( vector< vector< int> > & ob, int row, int col, int m, int n){ if( row == m && col == n){ ++cnt; return; } else if( row >= m || col >= n){ return; } if( ob[row][col] == 1) return; core( ob, row+1, col, m, n); core( ob, row, col+1, m, n); return; } };
相关文章推荐
- [LeetCode] Unique Paths && Unique Paths II && Minimum Path Sum (动态规划之 Matrix DP )
- LeetCode:Unique Paths I II
- (leetcode)Unique Paths II
- [LeetCode] Unique Paths II
- leetcode 63: Unique Paths II
- Leetcode133: Unique Paths II
- LeetCode63——Unique Paths II
- [LeetCode]Unique Paths II@python
- LeetCode 63 Unique Paths II
- 【leetcode刷题笔记】Unique Paths II
- 【leetcode】Unique Paths II
- Unique Paths II - Leetcode
- [LeetCode] 124: Unique Paths II
- LeetCode--Unique Paths II
- leetcode---Unique Paths II---dp
- [LeetCode]20. Unique Paths II唯一路径
- leetcode oj java Unique Paths II
- 【LeetCode】Unique Paths II
- [LeetCode] Unique Paths II
- LeetCode: Unique Paths II