221. 最大正方形

image.png

  1. package main
  2. import "fmt"
  3. func maximalSquare(matrix [][]byte) int {
  4. maxSide :=0
  5. if len(matrix)==0 ||len(matrix[0])==0{
  6. return maxSide
  7. }
  8. for i:=0;i<len(matrix);i++{
  9. for j:=0;j<len(matrix[i]);j++{
  10. if matrix[i][j]=='1'{
  11. maxSide = max(maxSide,1)
  12. //以i点为左上角 做大的边长
  13. currMaxSide :=min(len(matrix)-i,len(matrix[i])-j)
  14. for k:=1;k<currMaxSide;k++{
  15. flag :=true
  16. // 以i点为左上角 向右下方的斜角位置点
  17. if matrix[i+k][j+k]=='0'{
  18. break
  19. }
  20. for m := 0; m < k; m++ {
  21. if matrix[i + k][j + m] == '0' || matrix[i + m][j + k] == '0' {
  22. flag = false
  23. break
  24. }
  25. }
  26. if flag{
  27. maxSide = max(maxSide,k+1)
  28. }else {
  29. break
  30. }
  31. }
  32. }
  33. }
  34. }
  35. return maxSide*maxSide
  36. }
  37. func max(a,b int)int{
  38. if a>b{
  39. return a
  40. }
  41. return b
  42. }
  43. func min(a,b int)int{
  44. if a<b{
  45. return a
  46. }
  47. return b
  48. }
  49. func main() {
  50. //g :=[][]byte{
  51. // {'1','0','1','0','0'},
  52. // {'1','0','1','1','1'},
  53. // {'1','1','1','1','1'},
  54. // {'1','0','0','1','0'},
  55. //}
  56. //fmt.Println(maximalSquare(g))
  57. //g1 :=[][]byte{
  58. // {'1','0','1','1','1'},
  59. // {'0','1','0','1','0'},
  60. // {'1','1','0','1','1'},
  61. // {'1','1','0','1','1'},
  62. // {'0','1','1','1','1'},
  63. //}
  64. //fmt.Println(maximalSquare(g1))
  65. g2 :=[][]byte{
  66. {'1','0','1','1','0','1'},
  67. {'1','1','1','1','1','1'},
  68. {'0','1','1','0','1','1'},
  69. {'1','1','1','0','1','0'},
  70. {'0','1','1','1','1','1'},
  71. {'1','1','0','1','1','1'},
  72. }
  73. fmt.Println(maximalSquare(g2))
  74. }

image.png