Magic Squares In Grid LeetCode solution in C++

1
class Solution {
2
public:
3
int numMagicSquaresInside(vector<vector<int>> &grid) {
4
int result = 0;
5
for (int i = 0; i < grid.size(); i++) {
6
for (int j = 0; j < grid[i].size(); j++) {
7
if (isMagicSquare(grid, i, j)) {
8
result++;
9
}
10
}
11
}
12
return result;
13
}
14
bool isMagicSquare(vector<vector<int>> &grid, int i, int j) {
15
if (i + 2 < grid.size() && j + 2 < grid[i].size()) {
16
int col1 = grid[i][j] + grid[i + 1][j] + grid[i + 2][j];
17
int col2 = grid[i][j + 1] + grid[i + 1][j + 1] + grid[i + 2][j + 1];
18
int col3 = grid[i][j + 2] + grid[i + 1][j + 2] + grid[i + 2][j + 2];
19
int row1 = grid[i][j] + grid[i][j + 1] + grid[i][j + 2];
20
int row2 = grid[i + 1][j] + grid[i + 1][j + 1] + grid[i + 1][j + 2];
21
int row3 = grid[i + 2][j] + grid[i + 2][j + 1] + grid[i + 2][j + 2];
22
int diag1 = grid[i][j] + grid[i + 1][j + 1] + grid[i + 2][j + 2];
23
int diag2 = grid[i + 2][j] + grid[i + 1][j + 1] + grid[i][j + 2];
24
if ((col1 == col2) && (col1 == col3) && (col1 == row1) && (col1 == row2) && (col1 == row3) &&
25
(col1 == diag1) && (col1 == diag2)) {
26
set<int> s({1, 2, 3, 4, 5, 6, 7, 8, 9});
27
for (int r = 0; r < 3; r++) {
28
for (int c = 0; c < 3; c++) {
29
s.erase(grid[i + r][j + c]);
30
}
31
}
32
return s.empty();
33
}
34
}
35
return false;
36
}
37
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0