开头

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

题目原文

  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. 两种实现光标点插入range

    一.insertNode <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  2. c#调用c++制作的基于mfc的ocx控件

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51286926 原文中有问题部分已修改. c#调用c++制作的基于mfc的ocx控件     ...

  3. 十四、css动画基础知识

    引用动画的方式:   1.轻量动画: cubic-bezier(0.165, 0.840, 0.440, 1.000);//加上贝塞尔曲线使动画运动起来更加平滑 2..scrollNews,.m-tr ...

  4. QT5.3.1 Quick 开发(二) 项目类型的选择

    作为一个转行QT开发的新手,面对基于QML的开发时候 看到很多的项目类型感到很困惑,不知道应该怎么选择.如图: 经过研究发现QT widgets Application.QtQuick Applica ...

  5. SpringMVC学习(六)——@InitBinder注解

    有些类型的数据是无法自动转换的,比如请求参数中包含时间类型的数据,无法自动映射到Controller里的Date参数.需要使用@initBinder注解为binder提供一个数据的转换器,这个转换器可 ...

  6. python 案例一(电话铺)

    经过自己努力,做了一个简单的电话铺的录入和查询小程序,比较简单,喜欢的朋友可以练练手. 题目: 创建你自己的命令行 地址簿 程序.在这个程序中,你可以添加.修改.删除和搜索你的联系人(朋友.家人和同事 ...

  7. SQL Server ->>监控和管理Tempdb

    Tempdb作为一个公共数据库,存储着一些临时的数据.有些是用户自己创建的,有些是SQL Server自己创建的.Tempdb空间被使用的一些常见场景有 用户自定义:临时表和表变量.游标. SQL S ...

  8. 爬虫入门之Scrapy框架实战(新浪百科豆瓣)(十二)

    一 新浪新闻爬取 1 爬取新浪新闻(全站爬取) 项目搭建与开启 scrapy startproject sina cd sina scrapy genspider mysina http://roll ...

  9. lua的面向对象实现

    百度搜索一下,给出出的解决方案和学习帖子很多,可是我还是有很多的问题! (1)什么是面向对象? (2)lua中怎么实现面向对象? (3)什么样的实现既简单又能完成我的功能? (4)一定要按照c++的方 ...

  10. win10系统 WMI Provider Host cpu 占用过高

    今天上班,发现系统有点卡,QQ总是没响应. 打开任务管理器,发现有一个程序- WMI Provider Host 占用cpu竟然高达80% 然后通过事件查看器发现是一个pid为9832的程序造成的 然 ...