# 最大正方形 (Maximal Square) ## 题目描述 在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 ## 解题思路 ### 动态规划 **状态定义:** dp[i][j] 表示以 (i, j) 为右下角的最大正方形边长。 **状态转移:** dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1 ## Go 代码 ```go func maximalSquare(matrix [][]byte) int { if len(matrix) == 0 { return 0 } m, n := len(matrix), len(matrix[0]) dp := make([][]int, m+1) for i := range dp { dp[i] = make([]int, n+1) } maxSide := 0 for i := 1; i <= m; i++ { for j := 1; j <= n; j++ { if matrix[i-1][j-1] == '1' { dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1 if dp[i][j] > maxSide { maxSide = dp[i][j] } } } } return maxSide * maxSide } func min(a, b, c int) int { if a < b { if a < c { return a } return c } if b < c { return b } return c } ``` **复杂度:** O(mn) 时间,O(mn) 空间