Violence
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| class Solution { public int numMagicSquaresInside(int[][] grid) { int m = grid.length, n = grid[0].length;
int count = 0;
for (int i = 0; i < m - 2; i++) { for (int j = 0; j < n - 2; j++) { if (isMagicSquares(grid, i, j)) { count++; } } }
return count; }
private boolean isMagicSquares(int[][] grid, int i, int j) { int totalSum = 0; for (int k = i; k < i + 3; k++) { for (int l = j; l < j + 3; l++) { totalSum += grid[k][l]; } } if (totalSum % 3 != 0) { return false; } int targetSum = totalSum / 3;
int colSum0 = 0, colSum1 = 0, colSum2 = 0; for (int k = i; k < i + 3; k++) { colSum0 += grid[k][j]; colSum1 += grid[k][j + 1]; colSum2 += grid[k][j + 2]; } if (!(colSum0 == targetSum && colSum1 == targetSum && colSum2 == targetSum)) { return false; } int rowSum0 = 0, rowSum1 = 0, rowSum2 = 0; for (int k = j; k < j + 3; k++) { rowSum0 += grid[i][k]; rowSum1 += grid[i + 1][k]; rowSum2 += grid[i + 2][k]; } if (!(rowSum0 == targetSum && rowSum1 == targetSum && rowSum2 == targetSum)) { return false; }
int lineSum0 = grid[i][j] + grid[i + 1][j + 1] + grid[i + 2][j + 2]; int lineSum1 = grid[i][j + 2] + grid[i + 1][j + 1] + grid[i + 2][j]; if (!(lineSum0 == targetSum && lineSum1 == targetSum)) { return false; }
return true; } }
|
References
840. Magic Squares In Grid