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])
}