【LeetCode】840. 矩阵中的幻方

364 阅读1分钟

两个字符串的删除操作

3x3的幻方是一个填充有从1到9的不同数字的3x3矩阵,其中每行,每列以及两条对角线上的各数之和都相等。

给定一个由整数组成的grid,其中有多少个3×3的“幻方”子矩阵?(每个子矩阵都是连续的。

示例1

输入: [[4,3,8,4],
      [9,5,1,9],
      [2,7,6,2]]
输出: 1
解释: 
下面的子矩阵是一个 3 x 3 的幻方:
438
951
276

而这一个不是:
384
519
762

思路

  • 第一想法就是暴力求解

解法

func numMagicSquaresInside(grid [][]int) int {
    m:=len(grid)
    n:=len(grid[0])
    count:=0
    for i:=0;i<m-2;i=i+1{
        for j:=0;j<n-2;j=j+1{
            isOk:=true
            a:=grid[i][j]+grid[i][j+1]+grid[i][j+2]
            b:=grid[i+1][j]+grid[i+1][j+1]+grid[i+1][j+2]
            c:=grid[i+2][j]+grid[i+2][j+1]+grid[i+2][j+2]
            d:=grid[i][j]+grid[i+1][j]+grid[i+2][j]
            e:=grid[i][j+1]+grid[i+1][j+1]+grid[i+2][j+1]
            f:=grid[i][j+2]+grid[i+1][j+2]+grid[i+2][j+2]
            g:=grid[i][j]+grid[i+1][j+1]+grid[i+2][j+2]
            h:=grid[i][j+2]+grid[i+1][j+1]+grid[i+2][j]
            temp:=[]int{grid[i][j],grid[i][j+1],grid[i][j+2],
                    grid[i+1][j],grid[i+1][j+1],grid[i+1][j+2],
                    grid[i+2][j],grid[i+2][j+1],grid[i+2][j+2]}
            sort.Ints(temp)

            compareNum:=[]int{1,2,3,4,5,6,7,8,9}
            for i:=0;i<9;i++{
                if compareNum[i]!=temp[i]{
                        isOk=false
                        break
                }
            }
            if isOk&&a==b&&b==c&&c==d&&d==e&&e==f&&f==g&&g==h{
                count++
            }
        }
    }
    return count
}