2021-10-01leetcode840.矩阵中的幻方

这篇博客探讨了一种算法,用于在给定的二维网格中查找包含特定数字(例如5)的3x3子矩阵,并检查这些子矩阵是否构成幻方。作者通过迭代网格中的每个单元格,检查周围数字来确定是否存在幻方,并使用了两个方向数组(di和dj)来遍历子矩阵。IsMagic函数用于验证给定数组是否符合幻方条件。博客涉及了数组操作、幻方验证和二维网格处理等概念。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    vector<int> m={8,1,6,7,2,9,4,3,8,1,6,7,2,9,4,3};
    //这个是为了表示旋转的数组
    int numMagicSquaresInside(vector<vector<int>>& grid) {
        int di[8]={-1,-1,-1,0,1,1,1,0};
        int dj[8]={-1,0,1,1,1,0,-1,-1};
        int count=0;
        for(int i=1;i<grid.size()-1;i++)
            for(int j=1;j<grid[0].size()-1;j++)
                if(grid[i][j]==5){
                //只有中间的数字是5才接着判断是否是幻方,
                    vector<int> around;
                    for(int k=0;k<8;k++)
                        around.push_back(grid[i+di[k]][j+dj[k]]);
                        //遍历中心数组周围的数字
                    count+=IsMagic(around);
                    //判断是否为幻方
                }
        return count;
    }
    bool IsMagic(vector<int>& v){
        for(int i=0;i<8;i+=2)
            if(m[i]==v[0])
            //找到v数组的开头在m当中的位置
            return v==vector<int>(m.begin()+i,m.begin()+i+8)
            //截取m找到的开头的数组八个,然后判断后面的数字
            //但是如果这样的数组越界应该怎么办?
            ||v==vector<int>(m.rbegin()+7-i,m.rbegin()+15-i);
            //但是颠倒顺序的我还是有些不明白
            //这个是逆序的,需要倒着在数组中找到相应的位置
        return false;//奇数元素
    }
};

作者:duan-she-chi-8
链接:https://leetcode-cn.com/problems/magic-squares-in-grid/solution/fei-bao-li-nu-li-xie-chu-you-ya-de-dai-ma-shuang-b/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值