https://leetcode.com/problems/rectangle-area/
思路1
ref:http://bookshadow.com/weblog/2015/06/08/leetcode-rectangle-area/
用最小的右端点减去最大的左端点. 例如对于[A,C] 与[E,G], 求相交长度公式为max(min(C, G) - max(A, E), 0), 这里用嘴简单的那种AECG这种相交的case来记这个公式。右端点的min减去左端点的max,再与0取max
class Solution:
# @param {integer} A
# @param {integer} B
# @param {integer} C
# @param {integer} D
# @param {integer} E
# @param {integer} F
# @param {integer} G
# @param {integer} H
# @return {integer}
def computeArea(self, A, B, C, D, E, F, G, H):
sums = (C - A) * (D - B) + (G - E) * (H - F)
return sums - max(min(C, G) - max(A, E), 0) * max(min(D, H) - max(B, F), 0)
other method
知道计算公式就行。自己的公式也可以.最好是用ref的公式
my code
class Solution(object):
def computeArea(self, A, B, C, D, E, F, G, H):
"""
:type A: int
:type B: int
:type C: int
:type D: int
:type E: int
:type F: int
:type G: int
:type H: int
:rtype: int
"""
#这里两个线段是[A,C], [E,G], 为了求相交线段的长度,我们先求左端点的最大值,然后,分别用右端点减去这个最大值,然后求这两者的min。G跟C地位相同,play the same role 所以也要减去max(A,E)
a = min(C - max(A,E), G - max(A,E))
b = min(D - max(B,F), H - max(B,F))
sum_area = (C - A) * (D - B) + (G - E) * (H - F)
if a > 0 and b > 0:
return sum_area - a * b
else:
return sum_area