我們有 n 個與座標軸對齊的矩形, 其中 n > 0, 判斷它們是否能精確地覆蓋乙個矩形區域。
每個矩形用左下角的點和右上角的點的座標來表示。例如, 乙個單位正方形可以表示為 [1,1,2,2]。 ( 左下角的點的座標為 (1, 1) 以及右上角的點的座標為 (2, 2) )。
示例 1:
rectangles = [
[1,1,3,3],
[3,1,4,2],
[3,2,4,4],
[1,3,2,4],
[2,3,3,4]
]返回 true。5個矩形一起可以精確地覆蓋乙個矩形區域。
示例 2:
rectangles = [
[1,1,2,3],
[1,3,2,4],
[3,1,4,2],
[3,2,4,4]
]返回 false。兩個矩形之間有間隔,無法覆蓋成乙個矩形。
示例 3:
rectangles = [
[1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[3,2,4,4]
]返回 false。圖形頂端留有間隔,無法覆蓋成乙個矩形。
示例 4:
rectangles = [
[1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[2,2,4,4]
]返回 false。因為中間有相交區域,雖然形成了矩形,但不是精確覆蓋。
class
solution
:def
isrectanglecover
(self, rectangles: list[list[
int]])
->
bool
:'''
更新矩形的四個邊界,邊界形成的矩形面積和所有矩形面積和相等,是完美平鋪的
必要條件,同時還需要保證沒有重疊,判斷有沒有重疊的方法比較巧妙,不斷將新增矩形的
四個頂點加入集合,如果同乙個頂點出現偶數次,就抵消掉,最後剩餘的頂點數如果是4個
且就是矩形邊界組成的4個頂點,那就沒有重疊
'''# 首先定義乙個矩形區域的邊界
# bound0:矩陣左下角的x值
# bound1:矩陣左小角的y值
# bound2:矩陣右上角的x值
# bound3:矩陣右上角的y值
# import sys
max_val = sys.maxsize
min_val =
-sys.maxsize -
1 bound =
[max_val, max_val, min_val, min_val]
# 小矩形的面積和
sum_rectangles_areas =
0# pos_set:記錄矩陣座標的集合,如果左下角、右下角的座標出現過,則直接清除,最後應該只剩下大矩形的4個邊
pos_set =
set(
)# 從傳入的引數中獲取每乙個小矩形的左下角的x,y值,右下角的x,y值
for x1, y1, x2, y2 in rectangles:
# 從bound0,x1,x2中獲取最小值賦值給bound0
bound[0]
=min
(bound[0]
, x1, x2)
# 從bound1,y1,y2中獲取最小的y值賦值給bound1
bound[1]
=min
(bound[1]
, y1, y2)
# 從bound2,x1,x2中獲取最大的x值賦值給bound2
bound[2]
=max
(bound[2]
, x1, x2)
# 從bound[3],y1,y2中獲取最大的y值賦值給bound[3]
bound[3]
=max
(bound[3]
, y1, y2)
sum_rectangles_areas +=
(x2 - x1)
*(y2 - y1)
self.pos_set_handle(
(x1,y1)
, pos_set)
self.pos_set_handle(
(x1,y2)
, pos_set)
self.pos_set_handle(
(x2,y1)
, pos_set)
self.pos_set_handle(
(x2,y2)
, pos_set)
iflen
(pos_set)!=4
:return
false
# 最後大矩形的4個頂點在pos_set集合中且大矩形面積是各個小矩形面積之和
elif
(bound[0]
,bound[1]
)in pos_set and
(bound[0]
,bound[3]
)in pos_set and
(bound[2]
, bound[1]
)in pos_set and
(bound[2]
,bound[3]
)in pos_set and sum_rectangles_areas ==
(bound[2]
- bound[0]
)*(bound[3]
- bound[1]
):return
true
return
false
defpos_set_handle
(self, pos, pos_set:
set)
:if pos in pos_set:
pos_set.remove(pos)
else
: pos_set.add(pos)
391 完美矩形
給你乙個陣列 rectangles 其中 rectangles i xi,yi,ai,bi 表示乙個座標軸平行的矩形。這個矩形的左下頂點是 xi,yi 右上頂點是 ai,bi 如果所有矩形一起精確覆蓋了某個矩形區域,則返回 true 否則,返回 false 示例 1 輸入 rectangles 1,...
391 完美矩形問題
我們有 n 個與座標軸對齊的矩形,其中n 0,判斷它們是否能精確地覆蓋乙個矩形區域。每個矩形用左下角的點和右上角的點的座標來表示。例如,乙個單位正方形可以表示為 1,1,2,2 左下角的點的座標為 1,1 以及右上角的點的座標為 2,2 示例 1 rectangles 1,1,3,3 3,1,4,2...
Leetcode 391 完美矩形
我們有 n 個與座標軸對齊的矩形,其中 n 0,判斷它們是否能精確地覆蓋乙個矩形區域。每個矩形用左下角的點和右上角的點的座標來表示。例如,乙個單位正方形可以表示為 1,1,2,2 左下角的點的座標為 1,1 以及右上角的點的座標為 2,2 示例 1 rectangles 1,1,3,3 3,1,4,...