leetcode:MagicSquares

终于又开始刷题了
1、题目描述:
给定一个矩阵,求矩阵中有多少个magic squares
2、题目思路:
我是一点思路都么得的,所以是看了给的参考答案想到的:
有几点可以想一想:
(1) 这九宫格里面的每一个数字都不同,就是0-9,所以他们的和就是45
(2)以中间那个数为中点,横竖以及对角线的四个和的和,是60
(3)算一算,就知道中间的那个数是5
(4)所以,我们可以先找到中间的数是不是5,然后再进行判断九宫格是否符合标准,这样比较精简

3、代码

class Solution:
    def numMagicSquaresInside(self, grid: List[List[int]]) -> int:
        R, C = len(grid), len(grid[0])
       
        def magic_square(a,b,c,d,e,f,g,h,i):
            return ((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)
                    and sorted([a,b,c,d,e,f,g,h,i]) == [1,2,3,4,5,6,7,8,9])
        ans = 0
        for r in range(1, R-1):
            for c in range(1, C-1):
                if grid[r][c]==5:
                    if magic_square(grid[r-1][c-1],grid[r-1][c],grid[r-1][c+1],
                                    grid[r][c-1],grid[r][c],grid[r][c+1],
                                    grid[r+1][c-1],grid[r+1][c],grid[r+1][c+1]):
                    
                        ans+=1
                       
        return ans
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值