593. Valid Square
根据初中几何的知识可以知道正方形的四条边相等,两条对角线相等,满足这两个条件的四边形一定是正方形。
那么这样就好办了,只需要对四个点,两两之间算距离,如果计算出某两个点之间距离为0,
说明两点重合了,直接返回 false,
如果不为0,那么就建立距离和其出现次数之间的映射,最后如果我们只得到了 两个不同 的距离长度,
那么就说明是正方形了
T: O(1)
S: O(1)
class Solution {
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
Set<Integer> set = new HashSet<>();
set.add(dist(p1,p2));
set.add(dist(p1,p3));
set.add(dist(p1,p4));
set.add(dist(p2,p3));
set.add(dist(p2,p4));
set.add(dist(p3,p4));
return !set.contains(0) && set.size() == 2;
}
// (x0, y0) and (y0, y1)
// dist = (x0 - x1)^2 + (y0 - y1)^2
private int dist(int[] p1, int[] p2) {
return (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1]);
}
}
/*
[0,0] [1,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
[0,1] [1,1]
[1,0], p2 = , p3 = [0,1], p4 = [0,-1]
[0,1]
[-1,0] [1,0]
[0,-1]
*/
Last updated