在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。
示例:輸入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
輸出: 4
解題思路:看到這道題我的第乙個想法是首先將所有的1和0進行分割,劃分成為不同的堆,其中1和1之間只要有相連就劃分為乙個堆(相連表示在水平或者垂直方向是相連的),然後再在1這個堆裡面找到最大的正方形。但是仔細思考之後發現這麼做並沒有解決這個問題的核心點,最後還是要回到從矩陣中找到最大的正方形。後來看了別人的題解,思路為將矩陣中的每一行都看做是乙個二進位制數然後讓它和後面的行進行&運算再找出運算結果中最大的相連的1的數量,那麼正方形的邊長就是max(j-i+1,相連1的數量)(i和j表示第幾行)。ac**如下:
class solution:def maximalsquare(self, matrix: list[list[str]]) -> int:
# 將矩陣中的每一行都華為乙個二進位制數
nums = [int(''.join(n), base=2) for n in matrix]
res, n = 0, len(nums)
# 遍歷二進位制數陣列
for i in range(n):
temp = nums[i]
for j in range(i, n):
temp &= nums[j]
w = self.get_width(temp)
# 得到正方形的寬
h = j - i + 1
res = max(res, min(w, h))
return res * res
# 找到二進位制數中相連1的數目
def get_width(self, num):
w = 0
while num > 0:
num &= num << 1
w += 1
return w
LeetCode221 最大正方形
在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 動態規劃問題。設二維陣列dp m n 其中dp i j 表示以座標 i,j 為右下角元素的最大正方形的邊長。通過觀...
Leetcode 221 最大正方形
在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 思路 和最大長方形類似 可以參照不過每次的max換位長和寬中選取最小值,算他們的平方 提交的 class solu...
LeetCode 221 最大正方形
題目描述 在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 思路 本題需要返回矩陣中最大的正方形面積,計算正方形面積只要知道邊長即可。申請乙個跟matrix矩陣維度相同的...