<p>A <code>3 x 3</code> <strong>magic square</strong> is a <code>3 x 3</code> grid filled with distinct numbers <strong>from </strong>1<strong> to </strong>9 such that each row, column, and both diagonals all have the same sum.</p>

<p>Given a <code>row x col</code> <code>grid</code> of integers, how many <code>3 x 3</code> magic square subgrids are there?</p>

<p>Note: while a magic square can only contain numbers from 1 to 9, <code>grid</code> may contain numbers up to 15.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/09/11/magic_main.jpg" style="width: 322px; height: 242px;" />
<pre>
<strong>Input:</strong> grid = [[4,3,8,4],[9,5,1,9],[2,7,6,2]]
<strong>Output:</strong> 1
<strong>Explanation: </strong>
The following subgrid is a 3 x 3 magic square:
<img alt="" src="https://assets.leetcode.com/uploads/2020/09/11/magic_valid.jpg" style="width: 242px; height: 242px;" />
while this one is not:
<img alt="" src="https://assets.leetcode.com/uploads/2020/09/11/magic_invalid.jpg" style="width: 242px; height: 242px;" />
In total, there is only one magic square inside the given grid.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> grid = [[8]]
<strong>Output:</strong> 0
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>row == grid.length</code></li>
	<li><code>col == grid[i].length</code></li>
	<li><code>1 &lt;= row, col &lt;= 10</code></li>
	<li><code>0 &lt;= grid[i][j] &lt;= 15</code></li>
</ul>

#include <iostream>
class Solution {
public:
    int numMagicSquaresInside(vector<vector<int>>& grid) {
        int colLength = grid[0].size();
        int rowLength = grid.size();
        int magicDim = 3;
        int count = 0;
        int x = 3, y = 3;
        while(y <= rowLength){
            int sumRow[] = {0,0,0};
            int sumCol[] = {0,0,0};
            int sumDiagL = 0;
            int sumDiagR = 0;
            bool magic = true;
            int dup[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
            for(int i = magicDim; y-i < y; i--){
                for(int j = magicDim; x-j < x; j--){
                    if(grid[y-i][x-j] > 9 || grid[y-i][x-j] < 1 || grid[y-j][x-i] > 9 || grid[y-j][x-i] <1)
                    {
                        magic = false;
                        i = 0;
                        j = 0;
                    }
                    else{
                        if(dup[grid[y-i][x-j]] == -1){
                            dup[grid[y-i][x-j]] = grid[y-i][x-j];
                            sumRow[i-1] += grid[y-i][x-j];
                            sumCol[i-1] += grid[y-j][x-i];
                        }
                        else{
                            magic = false;
                            i = 0;
                            j = 0;
                        }
                    }
                }
                if(magic){
                    sumDiagL += grid[y-i][x-i];
                    sumDiagR += grid[y-i][x-(4-i)];
                }
            }
            x++;
            if(x > colLength){
                x = magicDim;
                y++;
            }
            if(sumDiagL==sumDiagR && magic){
                for(int i = 0; i < magicDim; i++){
                    if(sumRow[i]!= sumDiagL || sumCol[i] != sumDiagL){
                        magic = false;
                    }
                }
                if(magic) count++;
            }
        }
        return count;
    }
};
10100