题目大意:机器人从一个M*N的矩阵的一点(start)走到另一点(end),只能向下或者向上有几种走法
一看这题,就想起高中学概率时的时候做的一题:小明在一个M*N的街道上从(0,0)走到(m,n)有几种走法(小明不傻,不绕路)?
这不一模一样?
从(0,0)走到(m,n)一共要走过m+n个街道,其中m个横着的,n个竖着的。什么时候走横的什么时候走竖的全看小明心情,所有就有C(m,m+n)中走法。
原题中应该是C(m-1,m+n-2)
public int uniquePaths(int m, int n) {
if(m==1||n==1)
return 1;
m--;
n--;
long a=1;//分母
long b=1;//分子
int sum = m+n;
n=Math.min(m, n);//减少循环
for(int i=1;i<=n;i++){
a=a*sum;
b=b*i;
sum--;
}
return (int)(a/b);
}