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中的save方法和restore方法
初学者也许会误认为canvas中save方法是用来保存绘图状态的图形,而restore方法是用来还原之前保存的绘图状态的图形,其实不然. save():保存当前的绘图状态. restore():恢复之 ...
- easyui 删除行的时候 引起的 bug
问题场景 easyui 编辑里 有删除行的功能 文档提供的方法如下 $aplgrid为grid 的容器 ind 为当前行的索引 $aplgrid.datagrid('deleteRow', ind); ...
- 001Spring 定时任务 Scheduled
01.@Scheduled注解参数 @Scheduled支持fixedRate.fixedDelay.cron表达式参数.其中,fixedRate和fixedDelay没有区别,都是启动时执行1次,每 ...
- html dl dt dd 标签语法与使用
一.dl dt dd认识 html <dl> <dt> <dd>是一组合标 […]
- hdu 1010 Tempter of the Bone(dfs)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 万网知您所需,“域”众不同--.link/.love/.help等一大波新顶级域来袭!
万网在新顶级域市场再次发力,一大波域名界的小鲜肉新鲜上线,价格优惠,限时低至9元起,更有丰富的可注册资源. 一下,即刻世界,用记录生活,用观看世界, 用和做最好的! 新上线的个性化新顶级域价格如下: ...
- c/c++ 按照行读取文件
本文代码都在Windows/VC++6.0下测试过, 在linux/g++下也没有问题. 但是请一定注意linux和Windows文件格式的区别,比如: 1. 当linux上的代码读取Windows文 ...
- .net通过代码发送邮件
关键代码: 需要引用命名空间: using System.Net.Mail;using System.Net; MailMessage mailObj = new MailMessage(); mai ...
- hearbeat
heartbeat介绍: 作用: 通过heartbeat,可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务.在升级生产应用场景 ...
- 深入编解码:ASCII,UNICODE,UTF8等
ASCII ASCII = American Standard Code for Information Interchange(美国信息交换标准码) 美国最先有了计算机技术,计算机里面只有01,也就 ...