[英雄星球七月集训LeetCode解题日报] 第11日 矩阵
日报
题目
一、 1975. 最大方阵和
链接: 1975. 最大方阵和
1. 题目描述
2. 思路分析
- 题目要求两两操作,我们的目标是把尽可能多的负数改正数。
- 如果负数个数是偶数,一定可以把它们全改正数,那么把所有数字绝对值加起来即可。
- 如果负数个数是奇数,那么最终一定会留一个正数,我们选一个绝对值最小的数让它是负数,其它都是正数。
- 具体实现时,负数个数只关注奇偶,因此可以用异或来代替。
3. 代码实现
class Solution:
def maxMatrixSum(self, matrix: List[List[int]]) -> int:
ans = []
neg = 0
for row in matrix:
for c in row:
if c < 0:
ans.append(-c)
neg ^= 1
else:
ans.append(c)
return sum(ans) - 2*min(ans) if neg else sum(ans)
二、 840. 矩阵中的幻方
链接: 840. 矩阵中的幻方
1. 题目描述
2. 思路分析
数据范围很小,暴力检查即可。
检查思路:
- 中间数必须是5.
- 1~9每个数字都出现一次。
- 每行每列对角线加起来都是15
3. 代码实现
class Solution:
def numMagicSquaresInside(self, grid: List[List[int]]) -> int:
m,n = len(grid),len(grid[0])
def magic(a,b,c,d,e,f,g,h,i):
return e==5 and sorted([a,b,c,d,e,f,g,h,i])==list(range(1,10)) and a+b+c==15==d+e+f==g+h+i==a+d+g==b+e+h==c+f+i==a+e+i==c+e+g
ans = 0
for i in range(m-2):
for j in range(n-2):
if magic(
grid[i][j],grid[i][j+1],grid[i][j+2],
grid[i+1][j],grid[i+1][j+1],grid[i+1][j+2],
grid[i+2][j],grid[i+2][j+1],grid[i+2][j+2],
):
ans += 1
return ans