62. Unique Paths
Description:
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.
Solution:
一、题意理解
给定一个m*n的网格,最左上角起点有一个机器人,最右下角是重点,机器人只能向右或向下走,求机器人从起点到终点有多少条路径。
二、分析
1、典型的动态规划问题,而且我们很容易就能找到状态转移方程如下:
a b c
d e f
g h i
这是一个3*3的网格,F(x)为从a到x的路径数目,显然F(a)=1,F(b)=1,F(d)=1,而如果要走到e,就必须先走到b或者是d,即F(e) = F(b) + F(d),所以对于一个m*n的网格图,要走到第i行,第j列,就必须先走到第i-1行,第j列,或者第i行,第j-1列,即F(i, j) = F(i-1, j) + F(i, j-1)。
2、状态转移方程找到了,代码就可以写出来了,时间复杂度为O(m*n),空间复杂度为O(m*n):
class Solution {
public:
int uniquePaths(int m, int n) {
int i,j;
int **res = new int*[m];
for(i=0; i<m; ++i)
{
res[i] = new int[n];
res[i][0] = 1;
}
for(j = 0; j<n; ++j)
res[0][j] = 1;
for(i=1; i< m; ++i)
{
for(j = 1; j<n; j++)
res[i][j] = res[i-1][j] + res[i][j-1];
}
return res[m-1][n-1];
}
};
3、其实,高中的时候排列组合就有这样的题,很简单,对于3*7的网格,答案是C(7, 2).