[LeetCode]85 最大矩形

题目描述

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例:

输入:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
输出: 6

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution:
def maximalRectangle(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
if not matrix or not matrix[0]:
return 0
nums = [int(''.join(row), base=2) for row in matrix]
ans, N = 0, len(nums)
for i in range(N):
j, num = i, nums[i]
while j < N:
num = num & nums[j]
if not num:
break
l, curnum = 0, num
while curnum:
l += 1
curnum = curnum & (curnum << 1)
ans = max(ans, l * (j-i+1))
j += 1
return ans