62. Unique Paths (2D-dp)

time complexity: O(n^2)

class Solution {
    public int uniquePaths(int m, int n) {
        int dp[][] = new int[m][n];
        for (int i = 0; i < m; i++) dp[i][0] = 1; // from left top corner
        for (int i = 0; i < n; i++) dp[0][i] = 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];
    }
}

from bottom...ๅคชไธ็›ด่ฆบไบ†

class Solution {
    public int uniquePaths(int m, int n) {
        int dp[][] = new int[m][n];
        for (int i = 0; i < m; i++) dp[i][n-1] = 1; // from button
        for (int i = 0; i < n; i++) dp[m-1][i] = 1;
        
        for (int i = m-1; i > 0; i--) {
            for (int j = n-1; j > 0; j--) {
                
                dp[i-1][j-1] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[0][0];
    }
}

a little optimization of the space, 1-D array

ๅ…ถๅฏฆๅฏไปฅไธ€่กŒไธ€่กŒ็ดฏๅŠ ไธŠไพ†

ๅ› ็‚บๅช่ฆ่จˆ็ฎ—็ด…ๅŒก็š„้ƒจๅˆ†, ๆ‰€ไปฅ ้€™ๆฎต for loop ้ƒฝๅพž 1 ้–‹ๅง‹

        for (int i = 1; i < m; i++) { // row, from 1 start
            for (int j = 1; j < n; j++) { // column
                dp[j] += dp[j-1];
            }
        }

ๅ› ็‚บๅˆๅง‹ไบ†index 0, row ๅ’Œ col

้ƒฝ็‚บ 11111, ๆ‡‰่ฉฒ่ชชๅช้œ€่ฆๅˆๅง‹ row index = 0็š„ 11111

ๅ› ็‚บ้ƒฝ็”จๅŒไธ€ๅ€‹ไธ€็ถญ้™ฃๅˆ—

ๆ‰€ไปฅ็•ถ row index = 1ๆ™‚

dp[j], j 1 to n ้ƒฝๆ˜ฏ 111111

่ฆ็ฎ— ๅŽŸๆœฌ็š„dp[1][1] ๏ผdp[0][1] + dp[1][0]

ๅฐฑๅช้œ€่ฆๅŠ ไธŠdp [j-1], ไนŸๅฐฑๆ˜ฏ dp[j]+= dp [j-1] = == dp[1][1]

ๅ› ็‚บdp[j]ๆœฌ่บซๅฐฑๆŠŠdp[0][1]็š„ๅ€ผๅธถไธ‹ไพ†ไบ†,

ๅช้œ€่ฆๅŠ ไธŠdp[1][0] (ไนŸๅฐฑๆ˜ฏdp[j-1]

dp[1][1] ๏ผdp[0][1] + dp[1][0]

dp[1][1] = dp[j] + dp [j-1]

class Solution {
    public int uniquePaths(int m, int n) {
        int dp[] = new int[n]; // column size
        Arrays.fill(dp, 1); //fill each row to 1 first
        for (int i = 1; i < m; i++) { // row, from 1 start
            for (int j = 1; j < n; j++) { // from index 1 column
                dp[j] += dp[j-1]; //add pre column value
            }
        }
        return dp[n-1];
    }
}

Last updated