两个字符串的删除操作
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
}