当前位置: 代码迷 >> 综合 >> 840. 矩阵中的幻方
  详细解决方案

840. 矩阵中的幻方

热度:41   发布时间:2024-02-05 01:54:58.0

3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。

给定一个由整数组成的 grid,其中有多少个 3 × 3 的 “幻方” 子矩阵?(每个子矩阵都是连续的)。

1.暴力,如何写的更优雅。。可耻。。

class Solution:def numMagicSquaresInside(self, grid: List[List[int]]) -> int:self.res=0def helper(i,j):A=[[grid[x][y] for y in range(j,j+3)] for x in range(i,i+3)]if ''.join(sorted([str(A[x][y]) for x in range(3) for y in range(3)]))!="123456789":returnrow1,row2,row3=sum(A[0]),sum(A[1]),sum(A[2])cow1=sum([A[x][y] for x in range(3) for y in range(3) if y==0])cow2=sum([A[x][y] for x in range(3) for y in range(3) if y==1])cow3=sum([A[x][y] for x in range(3) for y in range(3) if y==2])left=sum([A[0][0],A[1][1],A[2][2]])right=sum([A[0][2],A[1][1],A[2][0]])if row1==row2==row3==cow1==cow2==cow3==left==right:self.res+=1for i in range(len(grid)):for j in range(len(grid[i])):if i+2<=(len(grid)-1) and j+2<=(len(grid[i])-1):helper(i,j)return self.resclass Solution(object):def numMagicSquaresInside(self, grid: List[List[int]]) -> int:R, C = len(grid), len(grid[0])def magic(a,b,c,d,e,f,g,h,i):return (sorted([a,b,c,d,e,f,g,h,i]) == list(range(1, 10)) and (a+b+c == d+e+f == g+h+i == a+d+g == b+e+h == c+f+i == a+e+i == c+e+g == 15))ans = 0for r in range(R-2):for c in range(C-2):if magic(grid[r][c], grid[r][c+1], grid[r][c+2],grid[r+1][c], grid[r+1][c+1], grid[r+1][c+2],grid[r+2][c], grid[r+2][c+1], grid[r+2][c+2]):ans += 1return ans

 

  相关解决方案