【07.29 每日一题】593. 有效的正方形

185 阅读1分钟

593. 有效的正方形

给定2D空间中四个点的坐标 p1, p2, p3 和 p4,如果这四个点构成一个正方形,则返回 true 。

点的坐标 pi 表示为 [xi, yi] 。输入 不是 按任何顺序给出的。

一个 有效的正方形 有四条等边和四个等角(90度角)。

示例1

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

示例2

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

思路

  • 本题是要求反馈是否能成一个正方形,正方形的特征:四条边相等,两条对角线相等。因此考虑,分别遍历四个点,分别两两求长度。
  • 具体的做法是:定义一个map,key为上述两类边的长度,value为条数,长度的种类必须为2,条数必须为2或4,且长度不不能为0。

解法

func validSquare(p1 []int, p2 []int, p3 []int, p4 []int) bool {
    temp:=[][]int{}
    temp=append(temp,p1)
    temp=append(temp,p2)
    temp=append(temp,p3)
    temp=append(temp,p4)
    dic:=map[int]int{}
    for i:=0;i<len(temp)-1;i++{
        for j:=i+1;j<len(temp);j++{
            distance:=calculate(temp[i],temp[j])
            dic[distance]++
        }
    }
    for k,v:=range dic{
        if v%2!=0 || k==0{
            return false
        }
    }
    return len(dic)==2
}

func calculate(p1 []int,p2 []int)int{
    return (p1[1]-p2[1])*(p1[1]-p2[1])+(p1[0]-p2[0])*(p1[0]-p2[0])
}

结果

image.png