一.问题描述
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.
二.我的解题思路
这道题一开始看起来感觉不好下手。然后就思考能有什么通用算法思想去解决,于是发现利用DP(动态规划)就能很好的解决本问题。
一般说使用DP的问题有两个特点:最优子结构 重叠子问题。本题不是求最优路径的问题,因此不需要考虑第一个要求,而本题很明显是具有重叠子问题的。如果直接采用分治递归的方法去做,那么复杂度肯定会比较高。
采用DP算法测试通过的程序如下:
class Solution {
public:
int uniquePaths(int m, int n) {
if(m==1 && n==1) return 1;
if(m<=0 || n<=0) return 0;
int res[m+1][n+1];
for(int i=0;i<=m;i++) res[i][0]=0;
for(int i=0;i<=n;i++) res[0][i]=0;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
res[i][j]=res[i-1][j]+res[i][j-1];
if(i==1 && j==1) res[i][j]=1;
}
}
return res[m][n];
}
};