Day 41
Date: November 9, 2022 11:00 AM
LinkedIn: https://leetcode.cn/problems/largest-plus-sign/description/?languageTags=python
Title: 最大加号标志
不会动归,就来个暴力吧
class Solution:
def orderOfLargestPlusSign(self, n: int, mines: List[List[int]]) -> int:
mines =set([tuple(val) for val in mines]) # set()去重 tuple元组
if len(mines) == n*n:
return 0
left, right, up, down = [[0] * (n+1) for _ in range(n+1)], [[0] * (n+1) for _ in range(n+1)], [[0] * (n+1) for _ in range(n+1)], [[0] * (n+1) for _ in range(n+1)]
# left
# 对应中心点左边连续1个数
for i in range(1, n+1):
for j in range(1, n+1):
if (i-1, j-1) in mines:# grid此坐标为0
continue
left[i][j] = left[i][j-1] + 1
# right
# 对应中心点右边连续1个数
for i in range(1, n+1):
for j in range(n-1, -1, -1):
if (i-1, j) in mines:# grid此坐标为0
continue
right[i][j] = right[i][j+1] + 1
# up
# 对应中心点上边连续1个数
for j in range(1, n+1):
for i in range(1, n+1):
if (i-1, j-1) in mines:# grid此坐标为0
continue
up[i][j] = up[i-1][j] + 1
# down
# 对应中心点下边连续1个数
for j in range(1, n+1):
for i in range(n-1, -1, -1):
if (i, j-1) in mines:# grid此坐标为0
continue
down[i][j] = down[i+1][j] + 1
ans = 1 # 已经排除为0的情况
for i, j in product(range(n), range(n)):
if (i,j) in mines:
continue
l, r, u, d = left[i+1][j+1], right[i+1][j], up[i+1][j+1], down[i][j+1]
if l > 1 and u > 1 and r > 1 and d > 1:
ans = max(ans, min(l, r, u, d)) # 阶数为上下左右中最小值
return ans