给定一个仅包含 0
和 1
、大小为 rows x cols
的二维二进制矩阵,找出只包含 1
的最大矩形,并返回其面积。
示例 1:
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。
示例 2:
输入:matrix = []
输出:0
示例 3:
输入:matrix = [["0"]]
输出:0
示例 4:
输入:matrix = [["1"]]
输出:1
示例 5:
输入:matrix = [["0","0"]]
输出:0
提示:
rows == matrix.length
cols == matrix.length
0 <= row, cols <= 200
matrix[i][j]
为'0'
或'1'
#
# @lc app=leetcode.cn id=85 lang=python3
#
# [85] 最大矩形
#
# @lc code=start
class Solution:
def maximalRectangle(self, matrix: List[List[str]]) -> int:
n = len(matrix)
ans = 0
if n==0:
return ans
m = len(matrix[0])
for j in range(m):
for i in range(n):
matrix[i][j] = int(matrix[i][j])
if matrix[i][j]==0 or i==0:
continue
matrix[i][j]+=matrix[i-1][j]
for i in range(n):
stack = []
matrix[i].append(0)
for j in range(m+1):
while(len(stack) and matrix[i][j]<matrix[i][stack[-1]]):
ii = stack.pop()
if len(stack)>0:
ans = max(ans,matrix[i][ii]*(j-stack[-1]-1))
else:
ans = max(ans,matrix[i][ii]*j)
stack.append(j)
return ans
# @lc code=end