1 class Solution 2 { 3 public: 4 int numMagicSquaresInside(vector<vector<int>>& grid) 5 { 6 7 int count=0; 8 int szx=grid.size(); 9 int szy=grid[0].size(); 10 for(int i=0;i<szx-2;i++) 11 { 12 for(int j=0;j<szy-2;j++) 13 { 14 if(grid[i+1][j+1]==5&&judge(grid,i,j)) 15 count++; 16 } 17 } 18 return count; 19 } 20 21 bool judge(vector<vector<int>> &grid,int i,int j) 22 { 23 if(grid[i][j]==5) //check there are duplicates or not 24 return false; 25 for(int x=i;x<i+3;x++) //judge cur num biggerthan 9 or not,if yes,return false 26 { 27 for(int y=j;y<j+3;y++) 28 { 29 int curele=grid[x][y]; 30 if(curele>9) 31 return false; 32 } 33 } 34 for(int x=i;x<i+3;x++) //judge every row's sum is 15 or not 35 { 36 if(grid[x][j]+grid[x][j+1]+grid[x][j+2]!=15) 37 return false; 38 } 39 for(int y=j;y<j+3;y++) //judge every col's sum is 15 or not 40 { 41 if(grid[i][y]+grid[i+1][y]+grid[i+2][y]!=15) 42 return false; 43 } 44 if(grid[i][j]+grid[i+1][j+1]+grid[i+2][j+2]!=15) //judge diagonals 45 return false; 46 if(grid[i+2][j]+grid[i+1][j+1]+grid[i][j+2]!=15) 47 return false; 48 return true; 49 } 50 };
基本上是暴力解法,问题不大
浙公网安备 33010602011771号