本题的数学思路是,m次向右,n次向下,相当于m+n个空位中,选n个空位放置向下的操作。
class Solution {
public int uniquePaths(int m, int n) {
m--;
n--;
int minn=Math.min(m,n);
int maxx=Math.max(m,n);
int ans=0;
ans=(int)func(minn,minn+maxx);
return ans;
}
public long func(int a,int b){ //功能函数,用来求组合排列,输入两个参数a小,b大
long bj=1;
for(int i=b;i>b-a;i--){
bj*=i;
}
long aj=1;
for(int j=a;j>0;j--){
aj*=j;
}
return bj/aj;
}
}
或者使用动态规划,由于只能向下走或者向右走,所以每一个位置的路径数都相当于他左边位置的路径数加上上面位置的路径数。
核心代码为:
int[][] a=new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(0==i||0==j){
a[i][j]=1;
}
else
a[i][j]=a[i-1][j]+a[i][j-1];
}
}
return a[m-1][n-1];