1277. Count Square Submatrices with All Ones
dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])+1
for border needs special handling, (first row, first col)
count add each dp[][] result
這三個位置的 以 i j 為右下角的正方 的 min(之前三個位置的結果) +1 (右下的本身) ⇒ 決定了 dp[i][j] 能多大
**dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])+1**
/*
how to make
1,1
1,1
?
--------------------
|(i-1,j-1) | (i-1, j)|
|--------------------|
|(i, j-1) | (i,j) |
--------------------
i, j => 3 cases
(1)
1,1 add one row (i-1, j)
or
(2)
1 add one col (i, j-1)
1.
(3)
1. add one row and add one col
(i-1, j-1)
so
dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) +1
+1 is self is square
*/time: O(mn)
space: O(mn)
easier version
把結果更新到本身, in-place
time: O(mn)
space: O(1)
Last updated
Was this helpful?