class Solution:
def findSquare(self, matrix: List[List[int]]) -> List[int]:
# 从右下角开始遍历,记录当前元素下边和右边的0的元素个数
N = len(matrix)
M = len(matrix[0])
if N == 0:
return []
if N == 1:
if matrix[0][0] == 0:
return [0, 0, 1]
else:
return []
# [0] 是 右边的0的元素个数 【1】是下边的元素个数
dp = [[[0, 0] for _ in range(M)] for _ in range(N)]
ans = [0, 0, 0]
for i in range(N - 1, -1, -1):
for j in range(M - 1, -1, -1):
if matrix[i][j] == 1:
dp[i][j][0] = dp[i][j][1] = 0
else:
if i < N - 1:
dp[i][j][1] = dp[i + 1][j][1] + 1
else:
dp[i][j][1] = 1
if j < M - 1:
dp[i][j][0] = dp[i][j + 1][0] + 1
else:
dp[i][j][0] = 1
size = min(dp[i][j][0], dp[i][j][1])
while size >= ans[2]:
if dp[i + size - 1][j][0] >= size and dp[i][j + size - 1][1] >= size:
ans = [i, j, size]
break
else:
size -= 1
return ans
每日一道Leetcode - 面试题 17.23. 最大黑方阵
最新推荐文章于 2024-06-15 09:23:13 发布