3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。

给定一个由整数组成的 N × N 矩阵,其中有多少个 3 × 3 的 “幻方” 子矩阵?(每个子矩阵都是连续的)。

示例 1:

输入: [[4,3,8,4], [9,5,1,9], [2,7,6,2]] 输出: 1 解释: 下面的子矩阵是一个 3 x 3 的幻方: 438 951 276 而这一个不是: 384 519 762 总的来说,在本示例所给定的矩阵中只有一个 3 x 3 的幻方子矩阵。

提示:

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

注意题目中说的是1到9的数字

class Solution {
public:
int numMagicSquaresInside(vector<vector<int> >& grid) {
int res = 0;
int r = grid.size();
int c = grid[0].size();
for(int i = 0; i <= r - 3; i++)
{
for(int j = 0; j <= c - 3; j++)
{
bool check = true;
int flag = grid[i][j] + grid[i][j + 1] + grid[i][j + 2];
if( grid[i + 1][j] + grid[i + 1][j + 1] + grid[i + 1][j + 2] != flag
||grid[i + 2][j] + grid[i + 2][j + 1] + grid[i + 2][j + 2] != flag
||grid[i][j] + grid[i + 1][j + 1] + grid[i + 2][j + 2] != flag
||grid[i + 2][j] + grid[i + 1][j + 1] + grid[i][j + 2] != flag)
{
check = false;
}
for(int y = i; y <= i + 2; y++)
for(int x = j; x <= j + 2; x++)
if(grid[y][x] > 9 || grid[y][x] <= 0)
{
check = false;
break;
}
if(check)
res++;
}
}
return res;
}
};

最新文章

  1. 【C#】toString(&quot;Format&quot;) 格式化
  2. 每日Scrum(6)
  3. Python全栈--7模块--random os sys time datetime hashlib pickle json requests xml
  4. MongoDB (四) MongoDB 数据模型
  5. NAVICATE 修改存储过程提示PROCEDURE _Navicat_Temp_Stored_Proc already exists 解决方法
  6. reloadData should be in main thread
  7. notepad++使用心得
  8. js带箭头左右翻动控制
  9. CSS换行1
  10. javascript 10进制和64进制的转换
  11. IOS NSArray 倒序
  12. TASKCTL产品功能清单-转载
  13. Java中JSON之全
  14. 【bzoj5161】最长上升子序列 状压dp+打表
  15. java FTPClient 上传文件 0kb 问题
  16. vuex 子组件传值
  17. android 环境变量
  18. [Java学习]面向对象-package;内部类;UML图表示六种关系
  19. DB分布式 跨库分页
  20. 快速排序——PowerShell版

热门文章

  1. JAVA开源微信管家平台——JeeWx捷微V3.3版本发布(支持微信公众号,微信企业号,支付窗)
  2. 关于mybatis-config.xml文件的基础解释
  3. css3之 渐变
  4. goland快捷键使用
  5. [BZOJ2729]排队
  6. pc端拖拽
  7. 使用 prerender 实现 SEO
  8. 小希的迷宫 HDU - 1272 (并查集)
  9. case 和decode的区别
  10. react仿豆瓣