840. Magic Squares In Grid (5月27日)
开头
这是每周比赛中的第一道题,博主试了好几次坑后才勉强做对了,第二道题写的差不多结果去试时结果比赛已经已经结束了(尴尬),所以今天只记录第一道题吧
题目原文
- 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 N x N 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 <= grid.length = grid[0].length <= 10
0 <= grid[i][j] <= 15
简单翻译一下
先给出幻方的定义:3×3的矩阵,矩阵中元素由1-9组成,并且每一行、每一列、俩条对角线三个元素之和相等
(ps,我刚开始没看清楚幻方的定义,吃了一些亏)
给定一个N*M的矩阵,其中有多少个三阶幻方?
例子
输入矩阵:[ [4,3,8,4],
[9,5,1,9],
[2,7,6,2] ]
输出结果:1
解释
矩阵 [ [4,3,8],
[9,5,1],
[2,7,6] ]
是一个三阶幻方
而另一个矩阵:[ [3,8,4],
[5,1,9],
[7,6,2] ]
不是三阶幻方
备注:
- 给定矩阵的维度M×N中,1<=M,N<10
矩阵中每个元素的值, 0<=a[m][n]<=15
解答
class Solution {
public:
int numMagicSquaresInside(vector<vector<int>>& grid) {
int flag=0;
vector<int> v{1,2,3,4,5,6,7,8,9};
if(grid.size()<2||(*grid.begin()).size()<2)
return flag;
for(int i=0;i<grid.size()-2;++i){
for(int j=0;j<(*grid.begin()).size()-2;++j){
int sum=15;
if( (grid[i+1][j+1]==5) &&
(grid[i][j]>=1)&&(grid[i][j]<=9) &&
(grid[i+1][j]>=1)&&(grid[i+1][j]<=9) &&
(grid[i+2][j]>=1)&&(grid[i+2][j]<=9) &&
(grid[i][j+1]>=1)&&(grid[i][j+1]<=9) &&
(grid[i+2][j+1]>=1)&&(grid[i+2][j+1]<=9) &&
(grid[i][j+2]>=1)&&(grid[i][j+2]<=9) &&
(grid[i+1][j+2]>=1)&&(grid[i][j+2]<=9) &&
(grid[i+2][j+2]>=1)&&(grid[i][j+2]<=9) &&
(grid[i][j]+grid[i][j+1]+grid[i][j+2]==sum) &&
(grid[i+1][j]+grid[i+1][j+1]+grid[i+1][j+2]==sum) &&
(grid[i+2][j]+grid[i+2][j+1]+grid[i+2][j+2]==sum) &&
(grid[i][j]+grid[i+1][j]+grid[i+2][j]==sum) &&
(grid[i][j+1]+grid[i+1][j+1]+grid[i+2][j+1]==sum) &&
(grid[i][j+2]+grid[i+1][j+2]+grid[i+2][j+2]==sum) &&
(grid[i][j]+grid[i+1][j+1]+grid[i+2][j+2]==sum) &&
(grid[i][j+2]+grid[i+1][j+1]+grid[i+2][j]==sum)
)
++flag;
}
}
return flag;
}
};
错误分析
第一次
没有考虑到给定的矩阵维度小于3×3
错误例子:
[[8]]
所以才加上了如下这个判断条件:
if(grid.size()<2||(*grid.begin()).size()<2)
return flag;
第二次
没有注意到三阶幻方的定义中元素是由1-9构成的,之前自认为只要每行每列对角线和相等就行
错误例子1
[ [10,3,5],
[1,6,11],
[7,9,2] ]
每行每列对角线和相等,但和不是15,同时元素不是在1-9内
错误例子2
[ [1,8,6],
[10,5,0],
[4,2,9] ]
每行每列对角线和相等,和是15,但元素不是在1-9内
笔记
- 挨个读取对元素,然后进行判断,综上可知,判断是不是三阶幻方的条件如下:
元素在1-9内+每行每列对角线和相等(=15)
注:按题目要求所构成的三阶幻方的中心元素必然是5,可优先判别,因为C++判断一系列‘与’构成的逻辑时,只要前面的出错了就不会进行判断后面的条件
840. Magic Squares In Grid (5月27日)的更多相关文章
- 【Leetcode_easy】840. Magic Squares In Grid
problem 840. Magic Squares In Grid solution: class Solution { public: int numMagicSquaresInside(vect ...
- 【LeetCode】840. Magic Squares In Grid 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 利用河图规律 暴力解法 日期 题目地址:https: ...
- 840. Magic Squares In Grid
class Solution { public: int numMagicSquaresInside(vector<vector<int>>& grid) { ; in ...
- 840. Magic Squares In Grid ——weekly contest 86
题目链接:https://leetcode.com/problems/magic-squares-in-grid/description attention:注意给定的数字不一定是1-9. time: ...
- 腾讯QQ认证空间4月27日已全面开放申请,欲进军自媒体
今天看到卢松松的博客上爆出,腾讯QQ认证空间4月27日已全面开放申请的消息,这一消息出来, 马浩周根据提示方法进行申请,下面先说说腾讯QQ认证空间的申请方法: QQ认证空间开放申请公告地址:http: ...
- 2016年12月27日 星期二 --出埃及记 Exodus 21:22
2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...
- 2016年11月27日 星期日 --出埃及记 Exodus 20:18
2016年11月27日 星期日 --出埃及记 Exodus 20:18 When the people saw the thunder and lightning and heard the trum ...
- 2016年10月27日 星期四 --出埃及记 Exodus 19:12
2016年10月27日 星期四 --出埃及记 Exodus 19:12 Put limits for the people around the mountain and tell them, `Be ...
- 2016年6月27日 星期一 --出埃及记 Exodus 14:24
2016年6月27日 星期一 --出埃及记 Exodus 14:24 During the last watch of the night the LORD looked down from the ...
随机推荐
- 为什么canvas宽高要设置在标签内>>宽高设置在style和设置在canvas的区别
一直很困惑为什么canvas标签和其他标签不一样,宽高需要设置在canvas标签里,设置在style里就会有问题. 纯粹个人理解,有错误欢迎指出. > 结论写在头 设置在style里有问题其实是 ...
- Codeforces Round #411 (Div. 2) C. Find Amir
C. Find Amir time limit per test 1 second memory limit per test 256 megabytes A few years ago ...
- unity3d代码优化标准
转载自:https://blog.csdn.net/m0_37283423/article/details/84378384 代码优化 ● 尽可能使用for来代替foreach:每次foreach会产 ...
- Netty入门1之----认识Netty
Netty 什么是Netty? Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架. Netty 是一个广泛使用的 Java ...
- WebLogic如何设置session超时时间
1.web.xml 设置WEB应用程序描述符web.xml里的<session-timeout>元素.这个值以分钟为单位,并覆盖weblogic.xml中的TimeoutSecs属性 ...
- javascript模块化以及加载打包
https://addyosmani.com/writing-modular-js/ 一些术语: 模块:可以理解为一个js文件,就像你以前需要import的那个文件一样:module不一定非要是一个外 ...
- T-SQL语法学习一(持续更新)
T-SQL语法学习(一) 第一节 不常用语句 不常用语句-指的是一些不常用的查询语句,不针对业务数据查询 SET STATISTICS IO ON(用于查询逻辑读取次数,物理读取次数) 图片 sele ...
- 代码分析工具推荐Understand
之前看ogitor ,第一次看到那么多代码~~不知道从哪里下手,而且好多东西都不会Ogre什么的都不是很清楚,对ogitor的代码结构的了解就更不用提了.晕头转向的 不知道从哪里下手,一点点的看起来好 ...
- Android Studio使用GIt提交代码到本地仓库后没有Push,如何回退保存
当在AS中使用Git来提交代码时,有时候我们不注意的情况下会把不想提交的文件或文件夹(比如\build下的)提交到本地仓库,如果此时并没有Push到远程仓库的话.如果让本地仓库的提交回退并且保存之前的 ...
- WiFi安全测试工具WiFiPhisher
官方下载地址:https://github.com/sophron/wifiphisher打不开的要翻GFW好事做到底wifiphisher-master.zip=================== ...