leetcode -- Rectangle Area -- 看看计算公式

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。GC地位相同,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

你可能感兴趣的:(LeetCode)