class Solution { public: int uniquePaths(int m, int n) { assert(m>=1 && n>=1); if(m==1 && n==1) return 1; if(m<n) return help(m+n-2,m-1); return help(m+n-2,n-1); } int help(int m,int n){ assert(m>0); assert(n>=0); if(n==0)return 1; int **val = new int *[m]; for(int i=0;i<m;i++) val[i] = new int [i+1]; for(int i=0;i<m;i++) for(int j=0;j<i+1;j++){ cout<<i<<"*"<<j<<" "; if(i==j) val[i][j] = 1; else if(j==0) val[i][j] = i+1; else val[i][j] = val[i-1][j-1] + val[i-1][j]; } int res = val[m-1][n-1]; for(int i=0;i<m;i++) delete []val[i]; delete []val; return res; } };
help函数实现的就是 组合问题,C(m,n)