leetcode刷題筆記 221題 最大正方形
阿新 • • 發佈:2020-10-07
leetcode刷題筆記 221題 最大正方形
源地址:221. 最大正方形
問題描述:
在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。
示例:
輸入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0輸出: 4
//基於動態規劃思想處理, dp(i)(j)表示以i、j為右下節點的正方形的最大邊長 //初始狀態 //if (i == 0 || j ==0)情況下 //if (matrix(i)(j) == 1) dp(i)(j) = 1 //else dp(i)(j) = 0 //狀態轉移方程 //if (matrix(i)(j) == 1) dp(i)(j) = math.min(math.min(dp(i-1)(j), dp(i)(j-1)), dp(i-1)(j-1))+1 //else dp(i)(j) = 0 object Solution { def maximalSquare(matrix: Array[Array[Char]]): Int = { if (matrix.length == 0 || matrix(0).length == 0) return 0 var maxSide = 0 val rowLength = matrix.length val colLength = matrix(0).length val dp = Array.ofDim[Int](rowLength,colLength) for (i <- 0 to rowLength - 1) { for (j <- 0 to colLength - 1){ if (matrix(i)(j) == '1') { if (i == 0 || j == 0) dp(i)(j) = 1 else dp(i)(j) = Math.min(Math.min(dp(i-1)(j-1), dp(i)(j-1)), dp(i-1)(j)) + 1 } maxSide = Math.max(maxSide, dp(i)(j)) } } return maxSide * maxSide } }