数学排列组合题。向左和向右走的步数总共是(m + n - 2),总步数全排列是(m + n - 2)!,其中每种走法重复(m - 1)! * (n - 1)!次。
所以不同的走法共:(m + n - 2)! / (m - 1)! / (n - 1)!。
public class Solution {
/**
* 数学运算表达式:(m + n - 2)! / (m - 1)! / (n - 1)!
* @param m int整型
* @param n int整型
* @return int整型
*/
public int uniquePaths (int m, int n) {
int totalSteps = m + n - 2;// 总步数
int min = Math.min(m - 1,n - 1);// 最小迭代累乘次数
long a = 1, b = 1;
while (min > 0){
a *= totalSteps--;
b *= min--;
}
return (int)(a / b);
}
}