只能向下或者向右,实际上从坐上至右下一共固定要走m+n-2步,其中m-1步向下,n-1步向右。 那么这道题就可以转化为简单的排列组合问题。
实际问题由于数据较大,单纯用排列组合的公式计算会导致大整数。 所以采取了动态规划的方式。用flag[i][j]表示走到ij位置可能的步数,这个值等于从左侧走入和从上册走入的步数之和=flag[i-1][j]+flag[i][j-1],由于只能向下或者向右,所以flag[i][0]和flag[0][i]全部为1.
public class Solution {
public int uniquePaths(int m, int n) {
int[][] flag = new int[m][n];
for(int i=0;i<m;i++ )
{
flag[i][0] = 1;
}
for(int j=0;j<n;j++ )
{
flag[0][j] = 1;
}
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
flag[i][j] = flag[i-1][j]+flag[i][j-1];
}
}
return flag[m-1][n-1];
}
}