image.png
    方程的证明:链接

    1. //动态规划法
    2. func maximalSquare(matrix [][]byte) int {
    3. dp := make([][]int, len(matrix))
    4. maxSide := 0
    5. for i := 0; i < len(matrix); i++ {
    6. dp[i] = make([]int, len(matrix[i]))
    7. for j := 0; j < len(matrix[i]); j++ {
    8. dp[i][j] = int(matrix[i][j] - '0')
    9. if dp[i][j] == 1 {
    10. maxSide = 1
    11. }
    12. }
    13. }
    14. for i := 1; i < len(matrix); i++ {
    15. for j := 1; j < len(matrix[i]); j++ {
    16. if dp[i][j] == 1 {
    17. dp[i][j] = min(min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1
    18. if dp[i][j] > maxSide {
    19. maxSide = dp[i][j]
    20. }
    21. }
    22. }
    23. }
    24. return maxSide * maxSide
    25. }
    26. func min(x, y int) int {
    27. if x < y {
    28. return x
    29. }
    30. return y
    31. }