开头

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

题目原文

  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. python 进程池的使用

    进程同步 进程的数据是独立存在的,进程也能加锁. from multiprocessing import Process, Lock def f(l,i): l.acquire() print('he ...

  2. C++中精确到小数点后任意位

    #include <iostream> #include <iomanip> //用setprecision(n)设置精度,其中n表示精确到小数点后n位 using names ...

  3. 在Ubuntu14.10中部署Hadoop2.6.0单节点伪分布集群

    1. 环境信息如下: ubuntu:14.10 jdk:openjdk-1.7.0 hadoop:2.6.0 2. 下载hadoop2.6.0, http://apache.fayea.com/had ...

  4. 利用canvas来绘制一个会动的图画,欢迎指教

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 深入理解java的形参和实参

    转载声明:本文转载自公众号「码匠笔记」. 前几天在头条上看到一道经典面试题,引发了一些思考.也是写这篇文章的导火索. 背景 请看题: public    classMain{    publicsta ...

  6. SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之AlwaysOn可用性组搭建

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  7. Linux 学习笔记之关机问题

    在linux领域内大多用在服务器上,很少遇到关机的操作. 正确的关机流程为:sync > shutdown > reboot > halt 关机指令为:shutdown ,你可以ma ...

  8. 【Leetcode】【Medium】Maximum Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  9. PHP小错误及分析

    即使是经验丰富的程序猿,在编程的过程中犯个错误也是在所难免的.如果开发人员不能注意到这些错误,也无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧,所以更好地理解错误信息 ...

  10. webpack学习(三)html-webpack-plugin插件

    一.html-webpack-plugin插件 简单创建 HTML 文件,用于服务器访问 例如:我们要为输出文件添加哈希值标记,避免老的不变的文件重新加载,避免新修改的文件受缓存影响. 在前后两次在终 ...