题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是规定3x3的幻方中的数字 1-9,且行列对角线之和都相等,求给定矩阵中有多少个上述的 3x3 幻方。

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考题解
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
class Solution:
def numMagicSquaresInside(self, grid: List[List[int]]) -> int:
m, n = len(grid), len(grid[0])
if m < 3 or n < 3:
return 0
ans = 0

for i in range(m-2):
for j in range(n-2):
if grid[i+1][j+1] != 5:
continue

mask = 0
x_sum = [0]*3
y_sum = [0]*3
for p in range(3):
for q in range(3):
x = grid[i+p][j+q]
x_sum[p] += x
y_sum[q] += x
mask |= 1 << x

if mask == 1022 and x_sum[0] == x_sum[1] == y_sum[0] == y_sum[1] == 15:
ans += 1
return ans