LeetCode 840. 矩阵中的幻方(数学)
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. 矩阵中的幻方(数学)相关推荐
- LeetCode—5757. 矩阵中最大的三个菱形和(Get Biggest ...)[中等]—分析及代码(Java)
LeetCode--5757. 矩阵中最大的三个菱形和[Get Biggest Three Rhombus Sums in a Grid][中等]--分析及代码[Java] 一.题目 二.分析及代码 ...
- LeetCode 562. 矩阵中最长的连续1线段(DP)
文章目录 1. 题目 2. 解题 1. 题目 给定一个01矩阵 M,找到矩阵中最长的连续1线段. 这条线段可以是水平的.垂直的.对角线的或者反对角线的. 示例: 输入: [[0,1,1,0],[0,1 ...
- LeetCode 1380. 矩阵中的幸运数(set)
1. 题目 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 在同一列的所有元 ...
- LeetCode 5356. 矩阵中的幸运数
5356. 矩阵中的幸运数 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 ...
- 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 ...
- LeetCode 1878. 矩阵中最大的三个菱形和(模拟)
文章目录 1. 题目 2. 解题 1. 题目 给你一个 m x n 的整数矩阵 grid . 菱形和 指的是 grid 中一个正菱形 边界 上的元素之和. 本题中的菱形必须为正方形旋转45度,且四个角 ...
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...
- 每日一道Leetcode -网格矩阵中的路径相关系列【动态规划|路径中(不)含值|有无障碍物|最小路径和】
class Solution:def uniquePaths(self, m: int, n: int) -> int:"""排列组合方法:从左上角到右下角的过程中 ...
- 2022-4-2 Leetcode 1380.矩阵中的幸运数
class Solution {public:vector<int> luckyNumbers (vector<vector<int>>& matrix) ...
最新文章
- Linux(CentOS6.5)中安装maven
- MSTP和MPLS专线有什么区别?——Vecloud
- 计算机网络的网络实验有哪几种,计算机网络实验一 网络设备的认识.doc
- DOM操作之CRUD操作
- 51单片机之串口通讯应用实例(逻辑分析仪调试)
- mysql sort aborted_mysql排序中断(Sort aborted)-mysql临时文件无法写入
- java元素定位div_Java+Selenium元素定位的练习(三)
- 得益于iPad 苹果二季度在平板电脑应用处理器市场份额接近60%
- mysql扩展中如何处理结果集_请写出PHP处理结果集的5个函数(使用mysql扩展)_学小易找答案...
- 10G整数文件中寻找中位数或者第K大数
- 【设计模式】面向对象作业-超级母牛的故事
- WF本质论 OpenSesame 芝麻开门代码
- Android 三类框架的理解以及MVVM框架的使用
- 开发者的固化思维及解决办法
- 平台型组织——数字化时代的组织智商鉴定器
- 打印和为sum的组合,动规法+DFS+迭代法
- 【Unity2D入门教程】简单制作一个弹珠游戏之制作场景①(开场,结束,板子,球)
- java微信开发需具备的条件
- 吴恩达机器学习入门笔记12/13-聚类与降维
- LeetCode--441--排列硬币