扣扣查查的写了半天,很简单的一道题就是写起来麻烦且丑陋:
class Solution {
public int numMagicSquaresInside(int[][] grid) {
int row = grid.length;
int col = grid[0].length;
if(row<3&&col<3) return 0;
int count = 0;
for(int i=0;i<=row-3;i++){
for(int j=0;j<=col-3;j++){
if(perfect(i,j,grid)) count++;
}
}
return count;
}
public boolean perfect(int i,int j,int[][] grid){
int[] num = new int[16];
int x1=0,x2=0;
int r1=0,r2=0,r3=0,c1=0,c2=0,c3=0;
for(int r=i;r<i+3;r++){
for(int c=j;c<j+3;c++){
if(num[grid[r][c]]>0) return false;
if(grid[r][c]>9||grid[r][c]<=0) return false;
num[grid[r][c]] += 1;
if(r-i==c-j) x1+=grid[r][c];
if(r+c==i+j+2) x2+=grid[r][c];
if(r==i) r1+=grid[r][c];
if(r==i+1) r2+=grid[r][c];
if(r==i+2) r3+=grid[r][c];
if(c==j) c1+=grid[r][c];
if(c==j+1) c2+=grid[r][c];
if(c==j+2) c3+=grid[r][c];
}
}
if(x1==x2&&r1==x1&&r2==x1&&r3==x1&&c1==x1&&c2==x1&&c3==x1) return true;
return false;
}
}