840. Magic Squares In Grid

1,题目要求
A 3 x 3 magic square is a 3 x 3 grid filled with distinct numbers from 1 to 9 such that each row, column, and both diagonals all have the same sum.

Given an grid of integers, how many 3 x 3 “magic square” subgrids are there? (Each subgrid is contiguous).
这里写图片描述
给出一个矩阵,判断其中3*3的幻方的数目。

2,题目思路
对于3饥阶的幻方,其中的特性主要为:幻方中心的点的值为5,而且每行的和、每列的和、两条对角线的和都是15。根据这样的特性,分别对对应的矩阵进行判断即可。

3,程序源码

class Solution {
public:
    int numMagicSquaresInside(vector<vector<int>>& grid) {
        int res = 0;
        for(int i=0;i<=(int)grid.size()-3;i++)
            for(int j=0;j<=(int)grid[0].size()-3;j++)
            {
                if(magicHelper(i,j,grid))
                    res++;
            }

        return res;
    }
public:
    bool magicHelper(int x,int y,vector<vector<int>>& grid)
    {
        if(grid[x+1][y+1]!=5)   return false;

        for(int i = x;i<x+3;i++)
        {
            int tmp = 0;
            for(int j = y;j<y+3;j++)
            {
                tmp += grid[i][j];
                if(grid[i][j]<10 && grid[i][j]>0)
                    continue;
                else
                    return false;
            }
            if(tmp!=15) return false;

        }
        int sum = 0;
        sum = grid[x][y] + grid[x+1][y] + grid[x+2][y];      if(sum!=15)  return false;
        sum = grid[x][y+1] + grid[x+1][y+1] + grid[x+2][y+1];if(sum!=15)  return false;
        sum = grid[x][y+2] + grid[x+1][y+2] + grid[x+2][y+2];if(sum!=15)  return false;

        sum = grid[x][y] + grid[x+1][y+1]+ grid[x+2][y+2];   if(sum!=15)  return false;
        sum = grid[x][y+2] + grid[x+1][y+1] + grid[x+2][y];  if(sum!=15)  return false;

        return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值