3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。
给定一个由整数组成的 N × N 矩阵,其中有多少个 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 总的来说,在本示例所给定的矩阵中只有一个 3 x 3 的幻方子矩阵。
提示:
1 <= grid.length = grid[0].length <= 10
0 <= grid[i][j] <= 15
class Solution {
public int numMagicSquaresInside(int[][] grid) {
int ans=0;
for(int i=0;i<grid.length-2;i++)
{
for(int j=0;j<grid[0].length-2;j++)
{ ans++;
int sum=grid[i][j]+grid[i+1][j]+grid[i+2][j];
if(grid[i][j+1]+grid[i+1][j+1]+grid[i+2][j+1]!=sum||grid[i][j+2]+grid[i+1][j+2]+grid[i+2][j+2]!=sum||
grid[i][j]+grid[i][j+1]+grid[i][j+2]!=sum||grid[i+1][j]+grid[i+1][j+1]+grid[i+1][j+2]!=sum||
grid[i+2][j]+grid[i+2][j+1]+grid[i+2][j+2]!=sum||grid[i+1][j+1]+grid[i][j]+grid[i+2][j+2]!=sum
)
{
ans--;
continue;
}
int [] temp=new int [100]; //此处测试是否是1-9的幻阵
{
temp[grid[i][j]]=1;
temp[grid[i+1][j]]=1;
temp[grid[i+2][j]]=1;
temp[grid[i][j+1]]=1;
temp[grid[i+1][j+1]]=1;
temp[grid[i+2][j+1]]=1;
temp[grid[i][j+2]]=1;
temp[grid[i+1][j+2]]=1;
temp[grid[i+2][j+2]]=1;
}
for(int k=1;k<=9;k++)
{
if(temp[k]!=1)
{
ans--;
break;
}
}
}
}
return ans;
}
}