动态规划——62. Unique Paths[medium]
2017-05-13 21:38
295 查看
题目描述
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.
从左上角走到右下角,只能向下或向右移动,求一共有几种走法。
解题思路
这道题和之前那道爬楼梯动态规划——70. Climbing Stairs[easy])的很像,逆向思考,如果当前步是最后一步,那么,倒数第二步会是怎样的?
倒数第二步要么在当前步的左侧,要么在当前步的上侧,两种情况相加就能得出总的走法了。
于是,使用一个二维数组,f[i][j]表示走到当前步的总的走法,于是有:f[i][j] = f[i][j-1]+ f[i-1][j]
(还要考虑边界问题,超出棋盘的部分都应该是 0 )
代码如下
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> tmp(n, 0);
vector<vector<int> > f(m,tmp);
f[0][0] = 1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int col = j - 1;
int row = i - 1;
if (i == 0 && j == 0)
continue;
if (col == -1 && row == -1)
f[i][j] = 0 + 0;
else if (col == -1)
f[i][j] = 0 + f[row][j];
else if (row == -1)
f[i][j] = f[i][col] + 0;
else
f[i][j] = f[i][col] + f[row][j];
}
}
return f[m - 1][n - 1];
}
};
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.
从左上角走到右下角,只能向下或向右移动,求一共有几种走法。
解题思路
这道题和之前那道爬楼梯动态规划——70. Climbing Stairs[easy])的很像,逆向思考,如果当前步是最后一步,那么,倒数第二步会是怎样的?
倒数第二步要么在当前步的左侧,要么在当前步的上侧,两种情况相加就能得出总的走法了。
于是,使用一个二维数组,f[i][j]表示走到当前步的总的走法,于是有:f[i][j] = f[i][j-1]+ f[i-1][j]
(还要考虑边界问题,超出棋盘的部分都应该是 0 )
代码如下
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> tmp(n, 0);
vector<vector<int> > f(m,tmp);
f[0][0] = 1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int col = j - 1;
int row = i - 1;
if (i == 0 && j == 0)
continue;
if (col == -1 && row == -1)
f[i][j] = 0 + 0;
else if (col == -1)
f[i][j] = 0 + f[row][j];
else if (row == -1)
f[i][j] = f[i][col] + 0;
else
f[i][j] = f[i][col] + f[row][j];
}
}
return f[m - 1][n - 1];
}
};
相关文章推荐
- LeetCode-63-Unique Paths II(动规)-Medium
- leetcode_63题——Unique Paths II(动态规划)
- 算法第14周Unique Paths II[medium]
- [Leetcode 63, Medium] Unique Paths II
- 动态规划——unique-paths
- 算法分析与设计丨第十六周丨LeetCode(20)——Unique Paths II(Medium)
- 动态规划——unique-paths-ii
- LeetCode Unique Paths 动态规划与大数
- 【Leetcode】【Medium】Unique Paths II
- Unique Paths (第九周 动态规划)
- 【LeetCode】(63)Unique Paths (Medium)
- (算法分析Week12)Unique Paths[Medium]
- 【LeetCode】(63)Unique Paths II(Medium)
- Medium 63题 Unique Paths II
- (算法分析Week12)Unique Paths II[Medium]
- LEETCODE —— Unique Paths II [动态规划 Dynamic Programming]
- 【leetcode】Unique Paths II(动态规划)
- [leetcode]unique-paths 动态规划 C++
- leetcode做题总结,动态规划I(Triangle,Unique PathsI/II,Minimum Path Sum,Climbing Stairs,Jump Game,Word Break)
- Leetcode 动态规划 Unique Paths II