LeetCode 63 — Unique Paths II(C++ Java Python)
2014-02-25 22:19
716 查看
题目:http://oj.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.
题目翻译:
"Unique Paths"续:
现在考虑如果在网格中添加一些障碍,会有多少种不同的路径?
网格中分别用1和0标记障碍物和空的网格。
例如,
下图所示的3 x 3方格的中间有一个障碍。
不同的路径总数为2。
注意:m和n最大为100。
分析:
有障碍的地方路径数为0。
C++实现:
Java实现:
Python实现:
感谢阅读,欢迎评论!
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.
题目翻译:
"Unique Paths"续:
现在考虑如果在网格中添加一些障碍,会有多少种不同的路径?
网格中分别用1和0标记障碍物和空的网格。
例如,
下图所示的3 x 3方格的中间有一个障碍。
不同的路径总数为2。
注意:m和n最大为100。
分析:
有障碍的地方路径数为0。
C++实现:
class Solution { public: int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) { int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); if(obstacleGrid[0][0] == 1) { return 0; } else if(m == 1 && n == 1) { return 1; } int paths[m] ; for(int i = 0; i < m; ++i) { if(obstacleGrid[i][0] == 1) { while(i < m) { paths[i][0] = 0; ++i; } break; } else { paths[i][0] = 1; } } for(int j = 1; j < n; ++j) { if(obstacleGrid[0][j] == 1) { while(j < n) { paths[0][j] = 0; ++j; } break; } else { paths[0][j] = 1; } } for(int i = 1; i < m; ++i) for(int j = 1; j < n; ++j) { if(obstacleGrid[i][j] == 1) { paths[i][j] = 0; } else { paths[i][j] = paths[i][j - 1] + paths[i - 1][j]; } } return paths[m - 1][n - 1]; } };
Java实现:
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int m = obstacleGrid.length; // if (m == 0) { // return 0; // } int n = obstacleGrid[0].length; if (obstacleGrid[0][0] == 1) { return 0; } else if (m == 1 && n == 1) { return 1; } int[][] paths = new int[m] ; for (int i = 0; i < m; ++i) { if (obstacleGrid[i][0] == 1) { while (i < m) { paths[i][0] = 0; ++i; } break; } else { paths[i][0] = 1; } } for (int j = 1; j < n; ++j) { if (obstacleGrid[0][j] == 1) { while (j < n) { paths[0][j] = 0; ++j; } break; } else { paths[0][j] = 1; } } for (int i = 1; i < m; ++i) for (int j = 1; j < n; ++j) { if (obstacleGrid[i][j] == 1) { paths[i][j] = 0; } else { paths[i][j] = paths[i][j - 1] + paths[i - 1][j]; } } return paths[m - 1][n - 1]; } }
Python实现:
class Solution: # @param obstacleGrid, a list of lists of integers # @return an integer def uniquePathsWithObstacles(self, obstacleGrid): m = len(obstacleGrid) n = len(obstacleGrid[0]) if obstacleGrid[0][0] == 1: return 0 elif m == 1 and n == 1: return 1 paths = [[] for i in range(m)] for i in range(m): if obstacleGrid[i][0] == 1: while(i < m): paths[i].append(0) i += 1 break; else: paths[i].append(1) for j in range(1, n): if obstacleGrid[0][j] == 1: while(j < n): paths[0].append(0) j += 1 break; else: paths[0].append(1) for i in range(1, m): for j in range(1, n): if obstacleGrid[i][j] == 1: paths[i].append(0) else: paths[i].append(paths[i][j - 1] + paths[i - 1][j]) return paths[m - 1][n - 1]
感谢阅读,欢迎评论!
相关文章推荐
- Palindrome Number
- Max Points on a Line
- Evaluate Reverse Polish Notation
- Sort List
- Insertion Sort List
- LRU Cache
- Binary Tree Postorder Traversal
- Binary Tree Preorder Traversal
- Reorder List
- Linked List Cycle
- Linked List Cycle II
- Word Break
- Word Break II
- Copy List with Random Pointer
- Single Number
- Single Number II
- Candy
- Gas Station
- Clone Graph
- Palindrome Partitioning