开头

这是每周比赛中的第一道题,博主试了好几次坑后才勉强做对了,第二道题写的差不多结果去试时结果比赛已经已经结束了(尴尬),所以今天只记录第一道题吧

题目原文

  1. 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] ]
不是三阶幻方

备注:

  1. 给定矩阵的维度M×N中,1<=M,N<10
  2. 矩阵中每个元素的值, 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. 挨个读取对元素,然后进行判断,综上可知,判断是不是三阶幻方的条件如下:
    元素在1-9内+每行每列对角线和相等(=15)
    注:按题目要求所构成的三阶幻方的中心元素必然是5,可优先判别,因为C++判断一系列‘与’构成的逻辑时,只要前面的出错了就不会进行判断后面的条件

840. Magic Squares In Grid (5月27日)的更多相关文章

  1. 【Leetcode_easy】840. Magic Squares In Grid

    problem 840. Magic Squares In Grid solution: class Solution { public: int numMagicSquaresInside(vect ...

  2. 【LeetCode】840. Magic Squares In Grid 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 利用河图规律 暴力解法 日期 题目地址:https: ...

  3. 840. Magic Squares In Grid

    class Solution { public: int numMagicSquaresInside(vector<vector<int>>& grid) { ; in ...

  4. 840. Magic Squares In Grid ——weekly contest 86

    题目链接:https://leetcode.com/problems/magic-squares-in-grid/description attention:注意给定的数字不一定是1-9. time: ...

  5. 腾讯QQ认证空间4月27日已全面开放申请,欲进军自媒体

    今天看到卢松松的博客上爆出,腾讯QQ认证空间4月27日已全面开放申请的消息,这一消息出来, 马浩周根据提示方法进行申请,下面先说说腾讯QQ认证空间的申请方法: QQ认证空间开放申请公告地址:http: ...

  6. 2016年12月27日 星期二 --出埃及记 Exodus 21:22

    2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...

  7. 2016年11月27日 星期日 --出埃及记 Exodus 20:18

    2016年11月27日 星期日 --出埃及记 Exodus 20:18 When the people saw the thunder and lightning and heard the trum ...

  8. 2016年10月27日 星期四 --出埃及记 Exodus 19:12

    2016年10月27日 星期四 --出埃及记 Exodus 19:12 Put limits for the people around the mountain and tell them, `Be ...

  9. 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 ...

随机推荐

  1. 为什么canvas宽高要设置在标签内>>宽高设置在style和设置在canvas的区别

    一直很困惑为什么canvas标签和其他标签不一样,宽高需要设置在canvas标签里,设置在style里就会有问题. 纯粹个人理解,有错误欢迎指出. > 结论写在头 设置在style里有问题其实是 ...

  2. 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 ...

  3. unity3d代码优化标准

    转载自:https://blog.csdn.net/m0_37283423/article/details/84378384 代码优化 ● 尽可能使用for来代替foreach:每次foreach会产 ...

  4. Netty入门1之----认识Netty

      Netty 什么是Netty? Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架. Netty 是一个广泛使用的 Java ...

  5. WebLogic如何设置session超时时间

    1.web.xml  设置WEB应用程序描述符web.xml里的<session-timeout>元素.这个值以分钟为单位,并覆盖weblogic.xml中的TimeoutSecs属性   ...

  6. javascript模块化以及加载打包

    https://addyosmani.com/writing-modular-js/ 一些术语: 模块:可以理解为一个js文件,就像你以前需要import的那个文件一样:module不一定非要是一个外 ...

  7. T-SQL语法学习一(持续更新)

    T-SQL语法学习(一) 第一节 不常用语句 不常用语句-指的是一些不常用的查询语句,不针对业务数据查询 SET STATISTICS IO ON(用于查询逻辑读取次数,物理读取次数) 图片 sele ...

  8. 代码分析工具推荐Understand

    之前看ogitor ,第一次看到那么多代码~~不知道从哪里下手,而且好多东西都不会Ogre什么的都不是很清楚,对ogitor的代码结构的了解就更不用提了.晕头转向的 不知道从哪里下手,一点点的看起来好 ...

  9. Android Studio使用GIt提交代码到本地仓库后没有Push,如何回退保存

    当在AS中使用Git来提交代码时,有时候我们不注意的情况下会把不想提交的文件或文件夹(比如\build下的)提交到本地仓库,如果此时并没有Push到远程仓库的话.如果让本地仓库的提交回退并且保存之前的 ...

  10. WiFi安全测试工具WiFiPhisher

    官方下载地址:https://github.com/sophron/wifiphisher打不开的要翻GFW好事做到底wifiphisher-master.zip=================== ...