开头

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

题目原文

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

  1. Example 1:
  2. Input: [[4,3,8,4],
  3. [9,5,1,9],
  4. [2,7,6,2]]
  5. Output: 1
  6. Explanation:
  7. The following subgrid is a 3 x 3 magic square:
  8. 438
  9. 951
  10. 276
  11. while this one is not:
  12. 384
  13. 519
  14. 762
  15. 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的矩阵,其中有多少个三阶幻方?

  1. 例子
  2. 输入矩阵:[ [4,3,8,4],
  3. [9,5,1,9],
  4. [2,7,6,2] ]
  5. 输出结果:1
  6. 解释
  7. 矩阵 [ [4,3,8],
  8. [9,5,1],
  9. [2,7,6] ]
  10. 是一个三阶幻方
  11. 而另一个矩阵:[ [3,8,4],
  12. [5,1,9],
  13. [7,6,2] ]
  14. 不是三阶幻方

备注:

  1. 给定矩阵的维度M×N中,1<=M,N<10
  2. 矩阵中每个元素的值, 0<=a[m][n]<=15

    解答

  1. class Solution {
  2. public:
  3. int numMagicSquaresInside(vector<vector<int>>& grid) {
  4. int flag=0;
  5. vector<int> v{1,2,3,4,5,6,7,8,9};
  6. if(grid.size()<2||(*grid.begin()).size()<2)
  7. return flag;
  8. for(int i=0;i<grid.size()-2;++i){
  9. for(int j=0;j<(*grid.begin()).size()-2;++j){
  10. int sum=15;
  11. if( (grid[i+1][j+1]==5) &&
  12. (grid[i][j]>=1)&&(grid[i][j]<=9) &&
  13. (grid[i+1][j]>=1)&&(grid[i+1][j]<=9) &&
  14. (grid[i+2][j]>=1)&&(grid[i+2][j]<=9) &&
  15. (grid[i][j+1]>=1)&&(grid[i][j+1]<=9) &&
  16. (grid[i+2][j+1]>=1)&&(grid[i+2][j+1]<=9) &&
  17. (grid[i][j+2]>=1)&&(grid[i][j+2]<=9) &&
  18. (grid[i+1][j+2]>=1)&&(grid[i][j+2]<=9) &&
  19. (grid[i+2][j+2]>=1)&&(grid[i][j+2]<=9) &&
  20. (grid[i][j]+grid[i][j+1]+grid[i][j+2]==sum) &&
  21. (grid[i+1][j]+grid[i+1][j+1]+grid[i+1][j+2]==sum) &&
  22. (grid[i+2][j]+grid[i+2][j+1]+grid[i+2][j+2]==sum) &&
  23. (grid[i][j]+grid[i+1][j]+grid[i+2][j]==sum) &&
  24. (grid[i][j+1]+grid[i+1][j+1]+grid[i+2][j+1]==sum) &&
  25. (grid[i][j+2]+grid[i+1][j+2]+grid[i+2][j+2]==sum) &&
  26. (grid[i][j]+grid[i+1][j+1]+grid[i+2][j+2]==sum) &&
  27. (grid[i][j+2]+grid[i+1][j+1]+grid[i+2][j]==sum)
  28. )
  29. ++flag;
  30. }
  31. }
  32. return flag;
  33. }
  34. };

错误分析

第一次

没有考虑到给定的矩阵维度小于3×3

  1. 错误例子:
  2. [[8]]

所以才加上了如下这个判断条件:

  1. if(grid.size()<2||(*grid.begin()).size()<2)
  2. return flag;

第二次

没有注意到三阶幻方的定义中元素是由1-9构成的,之前自认为只要每行每列对角线和相等就行

  1. 错误例子1
  2. [ [10,3,5],
  3. [1,6,11],
  4. [7,9,2] ]
  5. 每行每列对角线和相等,但和不是15,同时元素不是在1-9
  6. 错误例子2
  7. [ [1,8,6],
  8. [10,5,0],
  9. [4,2,9] ]
  10. 每行每列对角线和相等,和是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. Android recyclerview删除item刷新列表

    删除item坑 mModels.remove(i); notifyItemRemoved(i); //必须调用这行代码 notifyItemRangeChanged(i, mModels.size() ...

  2. Mac系统丢失管理员

    今天把osx变成平行用户,提示说要重启,但是一进来,我靠,自己的管理员用户变成了普通用户.我靠,有这么搞的嘛? 不能安装软件,不能https,不能保存密码,什么也不能做了. 网上一查,找到了几个解决方 ...

  3. mac安装brew, bower

    Mac安装Brew 安装命令如下:curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/loc ...

  4. 初学scrum及首次团队开发

    一.初学scrum 1.什么是scrum Scrum在英语的意思是橄榄球里的争球.而在这里Scrum是一种迭代式增量软件开发过程,经常性的被用于敏捷软件开发.Scrum包括了一系列实践和预定义角色的过 ...

  5. 初学Git和Github

    一开始看到老师的作业,出于好奇打开看了一下教程链接,一脸懵逼.What is this???然后慢慢了解,自己百度琢磨这个陌生的git,Git是一款免费.开源的分布式版本控制系统.Github是一个代 ...

  6. C# mvc读取模板并修改上传到web

    C# mvc读取模板并修改上传到web 后台: public FileResult GetXls() { FileStream fs = new FileStream(System.Web.HttpC ...

  7. MySQL5.7的组提交与并行复制

    从MySQL5.5版本以后,开始引入并行复制的机制,是MySQL的一个非常重要的特性. MySQL5.6开始支持以schema为维度的并行复制,即如果binlog row event操作的是不同的sc ...

  8. CVE-2014-0321漏洞成因分析

    1. 简介 最近在补之前落下的想学的东西,古河之前已经在微薄里面公布了此漏洞的poc及利用思路,不过在看古河的文章前我先独立分析一下其漏洞成因,记录下自己的分析流程. 2. 实验环境 操作系统:Win ...

  9. python csv写入数据,消除空行

    import csv rowlist=[{'first_name': 'mark', 'last_name': 'zhao','age':21}, {'first_name': 'tony', 'la ...

  10. ZT 设计模式六大原则(5):迪米特法则

    转贴: 设计模式六大原则(5):迪米特法则   原帖子的后续评论里面很多值得仔细去看 切记!像21楼 21楼 chenshufei2 2012-09-23 12:47发表 [回复] 上个例子,就是方法 ...