思路:本题只要写出组合式的计算函数就解决了问题,组合式子有以下关系:
C(n,k) = C(n-1,k) + C(n-1, k-1)
根据这个公式写出计算组合式的函数
后面的问题:
因为m*n个格子一共需要走 m + n - 2步,在其中选择 m -1 向右走,剩下的 n -1 步向下走,就到了目的地,所以结果就是C(m+n -2 , m -1)。
code:
class Solution {
public:
int combinationValue(int m,int n){
int *temp = new int[m+1], *ret = new int [m+1];
temp[0] = temp[1] = ret[0] = ret[1] = 1;
for(int i = 2;i<=m;i++){
for(int j = 1;j<=m;j++){
if(j >= i)
ret[j] = j > i? 0 : 1;
else
ret[j] = temp[j] + temp[j-1];
}
ret[0] = 1;
for(int j=0;j<=m;j++)
temp[j] = ret[j];
}
return ret[n];
}
int uniquePaths(int m, int n) {
int ret = combinationValue(m+n-2,m-1);
return ret;
}
};