Unique Paths

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)

原文地址:https://www.cnblogs.com/julie-yang/p/4750209.html