391 完美矩形問題

2021-10-10 16:06:39 字數 3033 閱讀 7356

我們有 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。因為中間有相交區域,雖然形成了矩形,但不是精確覆蓋。

何謂完美矩形?根據題目的描述可知,給定的所有小矩形如能構成完美矩形,需滿足如下的條件:

以題目給定的第乙個例子進行說明,給定小矩形的情況如下所示:

如上圖所示,給定的5個小矩形剛好組成乙個大的矩形,大矩形的左下角和右上角座標分別是[1,1]和[4,4]。矩形之間沒有重疊部分,大矩形中間也沒有空缺。再去看其他例子,應該就能明白為什麼不能構成完美矩形了。

那麼如何判斷給定的例子滿足要求呢?對於乙個單獨的矩形來說,它包含面積兩大要素。如果要構成完美矩形,首先,所有小矩形相加的面積之和要等於完美矩形的面積。而想要知道完美矩形的面積,又必須首先知道它的左下角[x1,y1]右上角座標[x2,y2]。而[x1,y1]就是所有小矩形座標中最靠左下角的那個,[x2,y2]是所有小矩形座標最靠右上角的那個。知道了[x1,y1][x2,y2],必然可以計算出完美矩形的面積,只有小矩形的面積之和等於完美矩形的面積,對應的結果才可能為true。

但是面積相等只能說有希望構成完美矩形,並可能一錘定音。如下所示,所有的小矩形構成了乙個大矩形,雖然有乙個單位的空缺,但恰好有乙個單位的重疊。因此,如果單純從面積相等判斷好像是可行的,但顯然是無法滿足要求的。

因此,我們還需要從點的角度進行進一步判斷。下面給出乙個合法的例子如左圖所示,不合法的例子如右圖所示,同時用數字標記了所有小矩形包包含的頂點出現的次數。可以發現,合法的例子中,出現次數為1的頂點就是最後完美矩形的四個頂點,其他的頂點都出現了兩次。而不合法的例子中,出現次數為1的頂點不只是完美矩形的四個頂點。

因此,我們可以在遍歷小矩形的同時記錄頂點出現的情況。如果當前頂點沒有遍歷過,則將其加入到集合中,否則將其從集合中刪除。如果最後集合中只包含可能的完美矩形的四個頂點,那麼說明例子是合法的,否則說明無法構成完美矩形。

總結,如果解該題需要遍歷所有的小矩形,遍歷過程中需要等到完美矩形的左下角和右上角座標、矩形面積之和,以及頂點的出現情況,最後,判斷小矩形面積之和和完美矩形面積之和是否相等,集合中是否只包含4個頂點且是完美矩形的四個頂點,只有這兩個條件同時滿足才能構成完美矩形。

解碼**如下所示:

class

solution

;for

(string s : ps)

else}}

// 面積是否相等

int expected =

(x2 - x1)

*(y2 -y1);if

(areas != expected)

// 頂點情況是否滿足

if(points.

size()

!=4||!points.

contains

(x1 +

" "+ y1)

||!points.

contains

(x2 +

" "+ y2)

||!points.

contains

(x1 +

" "+ y2)

||!points.

contains

(x2 +

" "+ y1)

)return

true;}

}

391 完美矩形

給你乙個陣列 rectangles 其中 rectangles i xi,yi,ai,bi 表示乙個座標軸平行的矩形。這個矩形的左下頂點是 xi,yi 右上頂點是 ai,bi 如果所有矩形一起精確覆蓋了某個矩形區域,則返回 true 否則,返回 false 示例 1 輸入 rectangles 1,...

Leetcode 391 完美矩形

我們有 n 個與座標軸對齊的矩形,其中 n 0,判斷它們是否能精確地覆蓋乙個矩形區域。每個矩形用左下角的點和右上角的點的座標來表示。例如,乙個單位正方形可以表示為 1,1,2,2 左下角的點的座標為 1,1 以及右上角的點的座標為 2,2 示例 1 rectangles 1,1,3,3 3,1,4,...

力扣 391 完美矩形 Python題解

我們有 n 個與座標軸對齊的矩形,其中 n 0,判斷它們是否能精確地覆蓋乙個矩形區域。每個矩形用左下角的點和右上角的點的座標來表示。例如,乙個單位正方形可以表示為 1,1,2,2 左下角的點的座標為 1,1 以及右上角的點的座標為 2,2 示例 1 rectangles 1,1,3,3 3,1,4,...