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?