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 };

基本上是暴力解法,问题不大

posted on 2018-06-17 16:53  高数考了59  阅读(272)  评论(0)    收藏  举报