CodeTop084 不同路径

不同路径

一个机器人位于一个mxn网格的左上角(起始点在下图中标记为 “Start”)
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)
问总共有多少条不同的路径?

这题可以说是动态规划中简单题中的简单题,确实没什么说的,直接无脑coding就行了

//无敌简单的动态规划
    public static int uniquePaths(int m, int n) {
        if (m <= 0 || n <= 0) return 0;
        int[][] dp = new int[m][n];

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (i == 0 || j == 0) {
                    dp[i][j] = 1;
                } else {
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }

        return dp[m - 1][n - 1];
    }

上面的动态规划使用的是二维数组,所以空间复杂度在那摆着呢,这边的话就做一个简单的额优化,将其变成一维数组的动态规划

//试试一维的动态规划
    public static int uniquePaths2(int m, int n) {
        if (m <= 0 || n <= 0) return 0;
        int[] dp = new int[n];

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

你可能感兴趣的:(CodeTop刷题笔记,深度优先,leetcode,算法,数据结构,java)