题目描述
题目链接:https://leetcode-cn.com/problems/magic-squares-in-grid/
解题思路
暴力求解,遍历矩阵中的元素,每遍历一个元素grid[i][j]
即可确定它的八邻域内的元素,如下图所示:
因此行遍历范围为(1, rows-1)
,列遍历范围为(1, cols-1)
。每一个3*3
的矩阵的中九个元素分别为a1 a2 a3 b1 b2 b3 c1 c2 c3
分别计算每一行的和row1, row2, row3
,每一列的和col1, col2, col3
,对角线的和diag1, diag2
,同时还要确定每一个3*3
矩阵中的组成为1 2 3 4 5 6 7 8 9
,这里可以借助sorted
函数。
具体解题代码如下,个人暴力解法都很通俗易懂= =
class Solution:
def numMagicSquaresInside(self, grid: List[List[int]]) -> int:
rows= len(grid) # 行数
cols = len(grid[0]) # 列数
result = 0
for i in range(1, rows-1):
for j in range(1, cols-1):
# 3*3矩阵中的元素罗列出来
a1,b1,c1 = grid[i-1][j-1] , grid[i-1][j] , grid[i-1][j+1]
a2,b2,c2 = grid[i][j-1] , grid[i][j] ,grid[i][j+1]
a3,b3,c3 = grid[i+1][j-1] , grid[i+1][j] , grid[i+1][j+1]
# 计算8个和
row1, row2, row3 = a1+b1+c1, a2+b2+c2, a3+b3+c3
col1, col2, col3 = a1+a2+a3, b1+b2+b3, c1+c2+c3
diag1, diag2 = a1+b2+c3, c1+b2+a3
# 条件一 以上8个和相同
condition1 = (row1==row2==row3==col1==col2==col3==diag1==diag2)
# 条件二 元素组成为[1,2,3,4,5,6,7,8,9]
condition2 = (sorted([a1,a2,a3,b1,b2,b3,c1,c2,c3]) == [1,2,3,4,5,6,7,8,9])
if condition1 and condition2:
result += 1
return result