其他分享
首页 > 其他分享> > 2021-10-01leetcode840.矩阵中的幻方

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

作者:互联网

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

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:10,int,01leetcode840,rbegin,vector,grid,2021,数组,li
来源: https://blog.csdn.net/weixin_51187533/article/details/120580101