Unique Paths I,II
2017-05-27 10:04
369 查看
题目来自于:https://leetcode.com/problems/unique-paths/
:https://leetcode.com/problems/unique-paths-ii/
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
How many possible unique paths are there?
Above is a 3 x 7 grid. How many possible unique paths are there?
Note: m and n will be at most 100.
这道题目就是典型的动态规划问题。之所以会写博客也是由于被网上的第二种算法吸引了。
典型的解法记住空间复杂度要在O(n)
另外一种是採用排列组合的方法来解答的
我们从左上角走到右下角一共要(m-1)+(n-1)步而当中我们能够选择(m-1)+(n-1)随意的(m-1)步向右,或者是(n-1)步向下。所以问题的答案就是Ian单的
这样的解法的缺点是可能在m。n取较大的数值时候无法储存。所以此处我们採用long int,
Total Accepted: 35700 Total
Submissions: 127653My Submissions
Question
Solution
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.
这里仅仅是加了障碍物而已。在障碍物的位子是0,
还有初始化仅仅能初始化第一个位子即起点。假设起点不是障碍物则为1,否则是0;
:https://leetcode.com/problems/unique-paths-ii/
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
How many possible unique paths are there?
Above is a 3 x 7 grid. How many possible unique paths are there?
Note: m and n will be at most 100.
这道题目就是典型的动态规划问题。之所以会写博客也是由于被网上的第二种算法吸引了。
典型的解法记住空间复杂度要在O(n)
class Solution { public: int uniquePaths(int m, int n) { vector<int> paths(n,1); for(int i=1;i<m;i++) for(int j=1;j<n;j++) paths[j]+=paths[j-1]; return paths[n-1]; } };
另外一种是採用排列组合的方法来解答的
我们从左上角走到右下角一共要(m-1)+(n-1)步而当中我们能够选择(m-1)+(n-1)随意的(m-1)步向右,或者是(n-1)步向下。所以问题的答案就是Ian单的
这样的解法的缺点是可能在m。n取较大的数值时候无法储存。所以此处我们採用long int,
class Solution { public: int uniquePaths(int m, int n) {// (m-1 + n-1)! / ((m-1)! * (n-1)!) int large = max(m,n) -1; int small = min(m,n) -1; if (large == 0 || small == 0) return 1; long int numerator = 1, denominator = 1; for (int i=1; i<=small; ++i){ numerator *= large + i; denominator *= i; } return numerator/denominator; } };
Unique Paths II
Total Accepted: 35700 TotalSubmissions: 127653My Submissions
Question
Solution
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.
这里仅仅是加了障碍物而已。在障碍物的位子是0,
还有初始化仅仅能初始化第一个位子即起点。假设起点不是障碍物则为1,否则是0;
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { vector<int> paths(obstacleGrid[0].size(),0); paths[0]=!obstacleGrid[0][0]; for(int i=0;i<obstacleGrid.size();++i) for(int j=0;j<obstacleGrid[0].size();++j) if(obstacleGrid[i][j]==1) paths[j]=0; else if(j-1>=0) paths[j]+=paths[j-1]; return paths[obstacleGrid[0].size()-1]; } };
相关文章推荐
- Unique Paths II
- [LeetCode] Unique Paths II
- LeetCode:Unique Paths I II
- Unique Paths II
- [LeetCode]Unique Paths II
- LeetCode: Unique Paths II [062]
- 63. Unique Paths II
- 63. Unique Paths II
- [LeetCode] Unique Paths and Unique Paths II
- LeetCode: Unique Paths I & II & Minimum Path Sum
- leetcode: Unique Paths II
- Unique Paths II
- 63. Unique Paths II
- leetcode_Unique Paths II
- [leetcode][DP] Unique Paths II
- Unique Paths I,II
- LeetCode63:Unique Paths II
- 【LeetCode】Unique Paths II
- 【LeetCode】C# 63、Unique Paths II
- 63. Unique Paths II