# leetcode-840-Magic Squares In Grid

### 题目描述：

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).

Example 1:

```Input: [[4,3,8,4],
[9,5,1,9],
[2,7,6,2]]
Output: 1
Explanation:
The following subgrid is a 3 x 3 magic square:
438
951
276

while this one is not:
384
519
762

In total, there is only one magic square inside the given grid.```

Note:

1. `1 <= grid.length <= 10`
2. `1 <= grid[0].length <= 10`
3. `0 <= grid[i][j] <= 15`

### 要完成的函数：

int numMagicSquaresInside(vector<vector<int>>& grid)

### 说明：

1、这道题给定一个二维的vector，也就是一个矩阵，要求判断这个矩阵中含有多少个magic三维矩阵，返回数量。

magic三维矩阵的定义是，所有数值都在1-9之间（闭区间），且每一行、每一列和每条对角线的和都相等（也就是15）。

2、这是一道简单题，我们直接暴力处理就好了。

```    int numMagicSquaresInside(vector<vector<int>>& grid)
{
int hang=grid.size(),lie=grid[0].size(),res=0;
for(int i=1;i<=lie-2;i++)
{
for(int j=1;j<=lie-2;j++)//从第二行第二列开始判断中心点，直到倒数第二行倒数第二列结束
{
if(grid[i][j]==5)//满足第一个条件
{
if(grid[i-1][j-1]<=9&&grid[i-1][j-1]>=1&&
grid[i-1][j]<=9&&grid[i-1][j]>=1&&
grid[i-1][j+1]<=9&&grid[i-1][j+1]>=1&&
grid[i][j-1]<=9&&grid[i][j-1]>=1&&
grid[i][j+1]<=9&&grid[i][j+1]>=1&&
grid[i+1][j-1]<=9&&grid[i+1][j-1]>=1&&
grid[i+1][j]<=9&&grid[i+1][j]>=1&&
grid[i+1][j+1]<=9&&grid[i+1][j+1]>=1)//判断是否都在1-9之间
{
if((grid[i-1][j-1]+grid[i-1][j]+grid[i-1][j+1]==15)&&
(grid[i][j-1]+grid[i][j]+grid[i][j+1]==15)&&
(grid[i+1][j-1]+grid[i+1][j]+grid[i+1][j+1]==15)&&
(grid[i-1][j-1]+grid[i][j-1]+grid[i+1][j-1]==15)&&
(grid[i-1][j]+grid[i][j]+grid[i+1][j]==15)&&
(grid[i-1][j+1]+grid[i][j+1]+grid[i+1][j+1]==15)&&
(grid[i-1][j-1]+grid[i][j]+grid[i+1][j+1]==15)&&
(grid[i-1][j+1]+grid[i][j]+grid[i+1][j-1]==15))//判断三行三列和两条对角线的和是否为15
res++;
}
}
}
}
return res;
}```

0 条评论

• ### leetcode-200-岛屿的个数（dfs找所有的连通分量）

给定一个由 '1'（陆地）和 '0'（水）组成的的二维网格，计算岛屿的数量。一个岛被水包围，并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格...

• ### leetcode-64-最小路径和

给定一个包含非负整数的 m x n 网格，请找出一条从左上角到右下角的路径，使得路径上的数字总和为最小。

• ### Leetcode 【200、695】

求二维矩阵中由 '1' 连通的岛屿个数（上下左右有 '1' 视为连通）。很明显用回溯法（DFS）求解。 （1）在递归回溯的函数外部，遍历二维矩阵，如果某个位置...

• ### LeetCode 1260. 二维网格迁移（二维转一维）

给你一个 n 行 m 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。

• ### 保持城市天际线

在二维数组grid中，grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量（不同建筑物的数量可能不同）的建筑物的高度。高度0也被认为是建...

• ### LeetCode 1706. 球会落何处（模拟）

用一个大小为 m x n 的二维网格 grid 表示一个箱子。 你有 n 颗球。箱子的顶部和底部都是开着的。

• ### LeetCode - 保持城市天际线

原题地址：https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/