题目:
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?
分析:
这道题是求在一个矩阵从左上角到右下角有多少不同的路径数。有两种解法
(1)通过计算C(m+n-2,m-1)来计算
(2)通过状态转移方程dp[i][j] = dp[i-1][j]+dp[i][j-1];来计算,其中初始条件dp[0][0] = 1
代码1:
public:
int uniquePaths(int m, int n) {
int result = 1;
int temp1 = m+n-2,temp2 =1,temp3;
if(m>n)
temp3 = n-1;
else temp3 = m-1;
for(int i = 1;i<=temp3;i++)
{
result *= temp1;
temp1--;
while(temp2<=temp3&&result%temp2 == 0)
{
result = result/temp2;
temp2++;
}
}
while(temp2 <= temp3)
{
result = result/temp2;
temp2++;
}
}
};
代码2:
class Solution {
public:
int uniquePaths(int m, int n) {
int dp[101][101];
if(m == 0&&n == 0)
return 0;
if(m == 1&&n == 1)
return 1;
dp[0][0] = 1;
for(int i = 0;i<m;i++)
{
for(int j = 0;j<n;j++)
{
if(i-1>=0&&j-1>=0)
dp[i][j] = dp[i-1][j]+dp[i][j-1];
else if(i-1>=0)
{
dp[i][j] = dp[i-1][j];
}
else if(j-1>=0)
{
dp[i][j] = dp[i][j-1];
}
}
}
return dp[m-1][n-1];
}
};