欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode——62不同路径

程序员文章站 2022-07-16 11:02:58
...

递归

int uniquePaths(int m, int n){
    
    int move(int x, int y, int m, int n){
        
        int n1 = 0;
        int n2 = 0;

        if( x == m && y == n){
            return 1;
        }
        
        
        // 向右走,限制多余的步数
        if( x <= m){
            n1 = move(x+1,y,m,n);
        }
        
        if( y <= n){
            
            n2 = move(x,y+1,m,n);
        }
        
        return n1 + n2;
    }
    
    return move(0,0,m-1,n-1);
}
  • 超出时间限制

动态规划

int uniquePaths(int m, int n){
    int dp[m][n];
    int i,j;
    
    for( i = 0; i < m; i++){
        for( j = 0; j < n; j++){
            dp[i][j] = 1;
        }
    }
    
    for( i = 1; i < m; i++){
        for( j = 1; j < n; j++){
            dp[i][j] = dp[i-1][j] + dp[i][j-1];
        }
    }
    
    return dp[m-1][n-1];
   
}

降低空间复杂度

  • 利用杨辉三角形

leetcode——62不同路径

int uniquePaths(int m, int n){
    int cur[n];
    int i,j;
    
    for( i = 0; i < n; i++){
            cur[i] = 1;
        }
    
    
    for( i = 1; i < m; i++){
        for( j = 1; j < n; j++){
            cur[j] += cur[j-1];
        }
    }
    
    return cur[n-1];
    
}

参考

[1]代码