题目:给定一个N行4列的二维数组matrix,表示N个每条边不是平行于X轴就是平行于Y轴的矩形,想知道所有的矩形能否组成一个大的完美矩形。完美矩形是指拼出的整体图案是矩形,既不缺任何块,也没有重合的部分。
思路:1、每一个小矩形的面积累加起来必须是等于大矩形的面积 2、除大矩形的四个顶点只出现一次之外,其它任何小矩形的顶点都必须出现偶数次。
def isRectangleCover(matrix):
import sys
if len(matrix) == 0 or len(matrix[0]) == 0:
return False
mostLeft = sys.maxsize
mostRight = -sys.maxsize
mostDown = sys.maxsize
mostUp = -sys.maxsize
map_ = {}
area = 0
for rect in matrix:
mostLeft = min(rect[0],mostLeft)
mostDown = min(rect[1],mostDown)
mostRight = max(rect[2],mostRight)
mostUp = max(rect[3],mostUp)
area += (rect[2]-rect[0]) * (rect[3] - rect[1])
leftDown = rect[0] + '_' + rect[1]
leftUp = rect[0] + '_' + rect[3]
rightDown = rect[2] + '_' + rect[1]
rightUp = rect[2] + '_' + rect[3]
if !map_.add(leftDown):
map.remove(leftDown)
if !map_.add(leftUp):
map.remove(leftUp)
if !map_.add(rightDown):
map.remove(rightDown)
if !map_.add(rightUp):
map.remove(rightUp)
if(mostLeft + '_' + mostDown not in map_ or
mostLeft + '_' + mostUp not in map_ or
mostRight + '_' + mostDown not in map_ or
mostRight + '_' + mostUp not in map_ or
len(map_)!=4):
return False
return area == (mostRight - mostLeft) * (mostUp - mostDown)