返回

拓展思维,深入理解 LeetCode 223 矩形面积问题

闲谈

问题陈述

给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。

每个矩形由其 左下 顶点和 右上 顶点坐标表示:

  • 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 表示。
  • 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 表示。

解决思路

为了计算两个矩形覆盖的总面积,我们可以将这个问题分解成几个步骤:

  1. 计算两个矩形的面积 :首先,我们需要计算出两个矩形的面积。矩形的面积可以通过以下公式计算:
    面积 = (右上顶点x坐标 - 左下顶点x坐标) * (右上顶点y坐标 - 左下顶点y坐标)
    
  2. 计算两个矩形重叠部分的面积 :接下来,我们需要计算出两个矩形重叠部分的面积。重叠部分的面积可以通过以下公式计算:
    重叠部分面积 = max(0, min(ax2, bx2) - max(ax1, bx1)) * max(0, min(ay2, by2) - max(ay1, by1))
    
  3. 计算两个矩形覆盖的总面积 :最后,我们可以通过以下公式计算出两个矩形覆盖的总面积:
    总面积 = 矩形1面积 + 矩形2面积 - 重叠部分面积
    

代码示例

以下是使用 Python 编写的代码示例,展示了如何计算两个矩形覆盖的总面积:

def compute_area(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2):
  """
  计算两个矩形覆盖的总面积

  Args:
    ax1, ay1: 矩形1的左下顶点坐标
    ax2, ay2: 矩形1的右上顶点坐标
    bx1, by1: 矩形2的左下顶点坐标
    bx2, by2: 矩形2的右上顶点坐标

  Returns:
    两个矩形覆盖的总面积
  """

  # 计算两个矩形的面积
  area1 = (ax2 - ax1) * (ay2 - ay1)
  area2 = (bx2 - bx1) * (by2 - by1)

  # 计算两个矩形重叠部分的面积
  overlap_area = max(0, min(ax2, bx2) - max(ax1, bx1)) * max(0, min(ay2, by2) - max(ay1, by1))

  # 计算两个矩形覆盖的总面积
  total_area = area1 + area2 - overlap_area

  return total_area


# 测试代码
ax1, ay1, ax2, ay2 = 0, 0, 2, 2
bx1, by1, bx2, by2 = 1, 1, 3, 3

total_area = compute_area(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2)

print("两个矩形覆盖的总面积:", total_area)

运行以上代码,将输出以下结果:

两个矩形覆盖的总面积: 8

总结

在本文中,我们深入研究了 LeetCode 上广受欢迎的问题 223 矩形面积。我们了解了其背后的数学原理和计算方法,并提供了详细的示例和代码演示,帮助您轻松理解和解决该问题。