力扣 391 完美矩形 Python題解

2021-10-08 01:42:33 字數 3286 閱讀 7888

我們有 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,...