221. Maximal Square
2026/1/12大约 1 分钟约 413 字
221. Maximal Square
难度: Medium
题目描述
Given an m x n binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.
Example 1:

Input: matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]] Output: 4
Example 2:

Input: matrix = [["0","1"],["1","0"]] Output: 1
Example 3:
Input: matrix = [["0"]] Output: 0
Constraints:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 300matrix[i][j]is'0'or'1'.
解题思路
代码实现
解决方案
java
func maximalSquare(matrix [][]byte) int {
dp := make([][]int, len(matrix))
for i := range dp {
dp[i] = make([]int, len(matrix[0]))
}
result := 0
for i := 0; i < len(matrix); i++ {
dp[i][0] = int(matrix[i][0]-'0')
if dp[i][0] == 1 {
result = 1
}
}
for i := 0; i < len(matrix[0]); i++ {
dp[0][i] = int(matrix[0][i]-'0')
if dp[0][i] == 1 {
result = 1
}
}
for i := 1; i < len(matrix); i++ {
for j := 1; j < len(matrix[0]); j++ {
if matrix[i][j] == '1' {
up := int(dp[i-1][j])
left := int(dp[i][j-1])
leftUp := int(dp[i-1][j-1])
dp[i][j] = slices.Min([]int{up, left, leftUp}) + 1
bigger := result < dp[i][j]
if bigger {
result = dp[i][j]
}
} else {
dp[i][j] = 0
}
}
}
return result * result
}