leetcode_593 有效的正方形

122 阅读1分钟

要求

给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。

一个点的坐标(x,y)由一个有两个整数的整数数组表示。

示例:

输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
输出: True

注意:

  • 所有输入整数都在 [-10000,10000] 范围内。
  • 一个有效的正方形有四个等长的正长和四个等角(90度角)。
  • 输入点没有顺序。

核心代码

class Solution:
    def validSquare(self, p1: List[int], p2: List[int], p3: List[int], p4: List[int]) -> bool:
        a1=(p1[0]-p2[0])**2+(p1[1]-p2[1])**2
        a2=(p1[0]-p3[0])**2+(p1[1]-p3[1])**2 
        a3=(p1[0]-p4[0])**2+(p1[1]-p4[1])**2
        a4=(p2[0]-p3[0])**2+(p2[1]-p3[1])**2
        a5=(p2[0]-p4[0])**2+(p2[1]-p4[1])**2
        a6=(p3[0]-p4[0])**2+(p3[1]-p4[1])**2
        tmp=[a1,a2,a3,a4,a5,a6]
        tmp.sort()
        if tmp[0]!=0 and tmp[0]==tmp[1] and tmp[0]==tmp[2] and tmp[0]==tmp[3] and tmp[4]==tmp[5]:
            return True
        return False

image.png

解题思路:我们根据四个点我们可以连接出来6条边,我们已知正方形四条边相等且对角线相等,菱形虽然四条边相等,但是对角线不相等,所以我们通过四点联连出来的6条边进行排序,最终前四条边判等,后两条边判等,前四条边小于后两条边,这样即可判定正方形。