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
Was this helpful?