要求
给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。
一个点的坐标(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
解题思路:我们根据四个点我们可以连接出来6条边,我们已知正方形四条边相等且对角线相等,菱形虽然四条边相等,但是对角线不相等,所以我们通过四点联连出来的6条边进行排序,最终前四条边判等,后两条边判等,前四条边小于后两条边,这样即可判定正方形。