1. 题目

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

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

示例:
输入: [[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 <= grid.length <= 10
1 <= grid[0].length <= 10
0 <= grid[i][j] <= 15

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/magic-squares-in-grid
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 证明中间必须是5


C1+C9=15−C5C_1+C_9=15-C_5C1​+C9​=15−C5​
C3+C7=15−C5C_3+C_7=15-C_5C3​+C7​=15−C5​
C2+C8=15−C5C_2+C_8=15-C_5C2​+C8​=15−C5​
C1+C2+C3+C7+C8+C9=15−C5+15−C5+C2+C8C_1+C_2+C_3+C_7+C_8+C_9=15-C_5+15-C_5+C_2+C_8C1​+C2​+C3​+C7​+C8​+C9​=15−C5​+15−C5​+C2​+C8​
即 30=15−C5+15−C5+C2+C8=45−3∗C530=15-C_5+15-C_5+C_2+C_8=45-3*C_530=15−C5​+15−C5​+C2​+C8​=45−3∗C5​
C5=5C_5=5C5​=5

class Solution {int x, y, sum;int nb[10];
public:int numMagicSquaresInside(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size(), i, j, count = 0;for(i = 0; i <= m-3; ++i)for(j = 0; j <= n-3; ++j){if(grid[i+1][j+1] != 5)//中间必须是5continue;if(isMagic(i,j,grid))count++;}return count;}bool isMagic(int &i, int &j, vector<vector<int>>& grid){memset(nb,0,sizeof nb);for(x=i; x<i+3; ++x){sum = 0;for(y=j; y<j+3; ++y){sum += grid[x][y];//横向if(grid[x][y]>=1 && grid[x][y]<=9 && nb[grid[x][y]]==0)nb[grid[x][y]] = 1;//判断是否只有1-9,且不重复的数}if(sum != 15)return false;}sum = 0;for(x = 1; x <= 9; ++x)sum += nb[x];if(sum != 9)//判断是否只有1-9,且不重复的数return false;for(y=j; y<j+3; ++y){sum = 0;for(x=i; x<i+3; ++x)sum += grid[x][y];//纵向if(sum != 15)return false;}sum = grid[i][j]+grid[i+1][j+1]+grid[i+2][j+2];//对角线if(sum != 15)return false;return grid[i+2][j]+grid[i+1][j+1]+grid[i][j+2] == 15;//对角线}
};

LeetCode 840. 矩阵中的幻方(数学)相关推荐

  1. LeetCode—5757. 矩阵中最大的三个菱形和(Get Biggest ...)[中等]—分析及代码(Java)

    LeetCode--5757. 矩阵中最大的三个菱形和[Get Biggest Three Rhombus Sums in a Grid][中等]--分析及代码[Java] 一.题目 二.分析及代码 ...

  2. LeetCode 562. 矩阵中最长的连续1线段(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个01矩阵 M,找到矩阵中最长的连续1线段. 这条线段可以是水平的.垂直的.对角线的或者反对角线的. 示例: 输入: [[0,1,1,0],[0,1 ...

  3. LeetCode 1380. 矩阵中的幸运数(set)

    1. 题目 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 在同一列的所有元 ...

  4. LeetCode 5356. 矩阵中的幸运数

    5356. 矩阵中的幸运数 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 ...

  5. 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 numMa ...

  6. LeetCode 1878. 矩阵中最大的三个菱形和(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 m x n 的整数矩阵 grid . 菱形和 指的是 grid 中一个正菱形 边界 上的元素之和. 本题中的菱形必须为正方形旋转45度,且四个角 ...

  7. LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...

  8. 每日一道Leetcode -网格矩阵中的路径相关系列【动态规划|路径中(不)含值|有无障碍物|最小路径和】

    class Solution:def uniquePaths(self, m: int, n: int) -> int:"""排列组合方法:从左上角到右下角的过程中 ...

  9. 2022-4-2 Leetcode 1380.矩阵中的幸运数

    class Solution {public:vector<int> luckyNumbers (vector<vector<int>>& matrix) ...

最新文章

  1. Linux(CentOS6.5)中安装maven
  2. MSTP和MPLS专线有什么区别?——Vecloud
  3. 计算机网络的网络实验有哪几种,计算机网络实验一 网络设备的认识.doc
  4. DOM操作之CRUD操作
  5. 51单片机之串口通讯应用实例(逻辑分析仪调试)
  6. mysql sort aborted_mysql排序中断(Sort aborted)-mysql临时文件无法写入
  7. java元素定位div_Java+Selenium元素定位的练习(三)
  8. 得益于iPad 苹果二季度在平板电脑应用处理器市场份额接近60%
  9. mysql扩展中如何处理结果集_请写出PHP处理结果集的5个函数(使用mysql扩展)_学小易找答案...
  10. 10G整数文件中寻找中位数或者第K大数
  11. 【设计模式】面向对象作业-超级母牛的故事
  12. WF本质论 OpenSesame 芝麻开门代码
  13. Android 三类框架的理解以及MVVM框架的使用
  14. 开发者的固化思维及解决办法
  15. 平台型组织——数字化时代的组织智商鉴定器
  16. 打印和为sum的组合,动规法+DFS+迭代法
  17. 【Unity2D入门教程】简单制作一个弹珠游戏之制作场景①(开场,结束,板子,球)
  18. java微信开发需具备的条件
  19. 吴恩达机器学习入门笔记12/13-聚类与降维
  20. LeetCode--441--排列硬币

热门文章

  1. java 数据结构_Java版-数据结构-队列(数组队列)
  2. 解决模拟MOSS用户调用WebService打开个人站点进行操作
  3. bzoj1233 单调队列优化dp
  4. Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]
  5. Python代码这样写更优雅(转)
  6. 2017《面向对象程序设计》课程作业三
  7. C++primer拾遗(第八章:IO库)
  8. 局部内部类和匿名内部类的对比
  9. 学习 Linux/C/C++ 必备资料
  10. 科大讯飞2021笔试题