LeetCode62. 不同路径

思路:本题类似于LeetCode64. 最小路径和

class Solution {
    public int uniquePaths(int m, int n) {
        // dp[i][j] 表示 从(0,0) 到 (i,j)有多少不同的路径
        int[][] dp = new int[m][n];
        // 第一行都是1
        for (int j = 0; j < n; j++) {
            dp[0][j] = 1;
        }
        // 第一列都是1
        for (int i = 0; i < m; i++) {
            dp[i][0] = 1;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
        /**
         *  优化:dp空间压缩
         *      当前坐标的值只和左边与上面的值有关,和其他的无关
         */
        // 版本1:按行更新
        /*
        int[] dp = new int[n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (j == 0) {
                    dp[j] = 1;
                    continue;
                }
                dp[j] += dp[j-1];
            }
        }
        return dp[n-1];
        */
        // 版本2:按列更新
        /*
        int[] dp = new int[m];
        for (int j = 0; j < n; j++) {
            for (int i = 0; i < m; i++) {
                if (i == 0) {
                    dp[i] = 1;
                    continue;
                }
                dp[i] += + dp[i-1];
            }
        }
        return dp[m-1];
        */
    }
}

 

posted @ 2021-01-01 22:05  不学无墅_NKer  阅读(66)  评论(0编辑  收藏  举报