题目
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来做,算法复杂度O(m*n)。
- 初始条件:最后一行和最后一个一列的路径肯定只有一条。
- 推导方式:其他位置的路径数等于其右边的路径数目加上其下边的路径数目。
- 输出数据:第一个位置的路径数。
实现
class Solution {
public:
int uniquePaths(int m, int n) {
int dp[m][n];
for(int i=0; i<m; i++)
dp[i][n-1] = 1;
for(int i=0; i<n; i++)
dp[m-1][i] = 1;
for(int i=m-2; i>=0; i--)
for(int j=n-2; j>=0; j--)
dp[i][j] = dp[i+1][j] + dp[i][j+1];
return dp[0][0];
}
};
思考
最喜欢这种最简单的dp了。