LeetCode刷题日记-数组-面试题 840. 矩阵中的幻方

题目描述

题目链接: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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值