Re: [闲聊] 每日leetcode

楼主: oin1104 (是oin的说)   2024-08-09 10:10:12
※ 引述 《enmeitiryous (enmeitiryous)》 之铭言:
:  
: 840. Magic Squares In Grid
: 题目:
: 给你一个matrix grid:其中0<=grid[i][j]<=15,求grid中有多少个3*3submatrix符合
: magic square的定义
:  
: 思路:
: 有兴趣可以看一下magic sqaure的维基,可以知道不论怎么填3*3的magic square的中心
: 值一定会是5,且row sum必是15,就按照magic square的定义写一个额外func来确定给定
: 的方阵是不是magic square,且只在遍历原matrix时遇到不在边界上的5才进行检查。
: 结果比暴力法遍历慢 唉
:
思路:
暴力暴力暴力暴力
多写一个函式跑判定
用纪录的
如果这个matrix大一点
搞不好就要在原本grid里面用到prefix sum?
姆咪
```cpp
class Solution {
public:
bool ok(vector<vector<int>>& grid , int i , int j)
{
vector<int> num(16,0);
vector<int> rs(3,0);
vector<int> cs(3,0);
for(int k = i-1 ; k <= i+1 ; k ++)
{
for(int p = j-1 ; p <= j+1 ; p ++)
{
num[grid[k][p]]++;
rs[k+1-i]+=grid[k][p];
cs[p+1-j]+=grid[k][p];
}
}
for(int p = 1 ; p <= 9 ; p ++)
{
if(!num[p])return false;
}
for(int p = 0 ; p < 2; p ++)
{
if(rs[p]!=rs[p+1])return false;
if(cs[p]!=cs[p+1])return false;
}
if(cs[0]!=rs[0])return false;
if(grid[i-1][j-1] + grid[i+1][j+1] != grid[i+1][j-1]+grid[i-1][j+1])retu
rn false;
return true;
}
int numMagicSquaresInside(vector<vector<int>>& grid)
{
int res = 0;
int n = grid.size();
int m = grid[0].size();
for(int i = 1 ; i < n-1 ; i ++)
{
for(int j = 1 ; j < m-1 ; j ++)
{
if(ok(grid,i,j))res++;
}
}
return res;
}
};
```
作者: SydLrio (狂岚嘴砲)   2024-08-09 10:17:00
你有什么用
作者: mrsonic (typeB)   2024-08-09 10:21:00
这么早发有什么用

Links booklink

Contact Us: admin [ a t ] ucptt.com