Re: [闲聊] 每日leetcode

楼主: dont   2024-08-09 09:14:25
840. Magic Squares In Grid
## 思路
中间放5 然后照题目检查col/row/diag sum
其他作法
要符合1~9又sum=15的可能
填下去只会有这种组合 (对角2,4,6,8)
2 9 4
7 5 3
8 1 6
-> 2,7,8,1,6,3,4,9 (逆时针)
-> 2,9,4,3,6,1,8,7 (顺时针)
感觉可以把外围8个数字照顺时钟列出来
再对这两种sequence*2 做match
不过我懒的写
## Complexity
Time: O(RC)
Space: O(1)
## Code
```python
"""
2 9 4 a1 a2 a3
7 5 3 a4 a5 a6
6 1 8 a7 a8 a9
"""
class Solution:
def numMagicSquaresInside(self, grid: List[List[int]]) -> int:
len_r, len_c = len(grid), len(grid[0])
def is_magic(r, c):
if grid[r+1][c+1] != 5:
return False
arr = [grid[r+dr][c+dc] for dr in range(3) for dc in range(3)]
# check distinct 1~9
if set(arr) != set(range(1, 10)):
return False
# check row
for i in range(0, 9, 3):
if arr[i] + arr[i+1] + arr[i+2] != 15:
return False
# check col
for i in range(3):
if arr[i] + arr[i+3] + arr[i+6] != 15:
return False
# check diag
for i in {0, 2}:
if arr[i] + arr[~i] != 10:
return False
return True
res = 0
for r in range(len_r-2):
for c in range(len_c-2):
if is_magic(r, c):
res += 1
return res
```
作者: oin1104 (是oin的说)   2024-08-09 10:27:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com