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