LC 62 Unique Paths(M)
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?
边界判断 当m 和 n都为1时候,直接出结果。
解题思路 (组合计算, DP)
当成算数的组合计算,以 3x7为例,路径应该是 2个下,6个右的 组合 D R R D R R R R 这样的组合公式就是 (m + n)!/(m! * n!) 如果 m < n 公式简化为 (m + n) *...(m+1)/m!
public int uniquePaths(int m, int n) {
if(m == 1 || n == 1)
return 1;
m--;
n--;
if(m < n) { // Swap, so that m is the bigger number
m = m + n;
n = m - n;
m = m - n;
}
long res = 1;
int j = 1;
for(int i = m+1; i <= m+n; i++, j++){ // Instead of taking factorial, keep on multiply & divide
res *= i;
res /= j;
}
return (int)res;
}
当(m==0 || n==0)路径始终为1, 因为不能左或上, 其他情况
u(m, n) = u(m-1, n) + u(m, n-1);
public int uniquePaths(int m, int n) {
int[][] grid = new int[m][n];
for(int i = 0; i<m; i++){
for(int j = 0; j<n; j++){
if(i==0||j==0)
grid[i][j] = 1;
else
grid[i][j] = grid[i][j-1] + grid[i-1][j];
}
}
return grid[m-1][n-1];
}
Last updated
Was this helpful?