Leetcode:63. Unique Paths II
2017-05-24 19:26
423 查看
Description
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.
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.
思路
同前一个题一样的动态规划,用一个二维数组记录状态,dp[i][j]表示从(0,0)到(i,j)的路径数dp[i][j] = dp[i][j-1] + dp[i-1][j],若obstacleGrid[i][j] = 1, dp[i][j] = 0
可以把二维数组降到一维
代码
二维数组class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m = obstacleGrid.size(); if(m == 0) return 0; int n = obstacleGrid[0].size(); vector<vector<int>> dp(m, vector<int>(n, 0)); dp[0][0] = obstacleGrid[0][0] == 1 ? 0 : 1; for(int i = 1; i < m; ++i){ if(obstacleGrid[i][0] == 1) dp[i][0] = 0; else dp[i][0] = dp[i - 1][0]; } for(int j = 1; j < n; ++j){ if(obstacleGrid[0][j] == 1) dp[0][j] = 0; else dp[0][j] = dp[0][j - 1]; } for(int i = 1; i < m; ++i){ 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]; } };
一维数组
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m = obstacleGrid.size(); if(m == 0) return 0; int n = obstacleGrid[0].size(); vector<int> dp(n, 0); dp[0] = obstacleGrid[0][0] ? 0 : 1; for(int j = 1; j < n; ++j){ if(obstacleGrid[0][j] == 1) dp[j] = 0; else dp[j] = dp[j - 1]; } int sum = 0; for(int i = 1; i < m; ++i){ sum = 0; for(int j = 0; j < n; ++j){ if(obstacleGrid[i][j] == 1) dp[j] = 0; else dp[j] = dp[j] + sum; sum = dp[j]; } } if(n == 1 && m == 1 && obstacleGrid[0][0] == 0) return 1; return dp[n - 1]; } };
相关文章推荐
- leetcode[63]Unique Paths II
- LeetCode-62. Unique Paths/63. Unique Paths II
- leetcode——63—— Unique Paths II
- Leetcode 63 Unique Paths II
- 算法分析与设计——LeetCode:63. Unique Paths II
- LeetCode 63 Unique Paths II
- LeetCode 63 --- Unique Paths II
- [LeetCode 63] Unique Paths II
- LeetCode 63 Unique Paths II
- LeetCode-63-Unique Paths II(C语言实现)
- LeetCode_63---Unique Paths II
- leetcode || 63、Unique Paths II
- leetcode_63. Unique Paths II
- [Leetcode 63, Medium] Unique Paths II
- leetcode63-Unique Paths II
- LeetCode 63 - Unique Paths II
- LeetCode 63 — Unique Paths II(C++ Java Python)
- LeetCode(63) Unique Paths II
- Leetcode 63 Unique Paths II
- LeetCode题库解答与分析——#63.不同路径IIUniquePathsII