Given the coordinates of four points in 2D space, return whether the four points could construct a square.
The coordinate (x,y) of a point is represented by an integer array with two integers.
Example:
Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
Output: True
Note:
All the input integers are in the range [-10000, 10000].
A valid square has four equal sides with positive length and four equal angles (90-degree angles).
Input points have no order.
java
import java.util.*;
class Solution {
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
int[] lengths = new int[]{findDistance(p1, p2), findDistance(p1, p3), findDistance(p1, p4), findDistance(p2, p3),
findDistance(p2, p4), findDistance(p3, p4)};
Arrays.sort(lengths);
boolean isSquare = lengths[0] == lengths[1] && lengths[1] == lengths[2] && lengths[2] == lengths[3] && lengths[4] == lengths[5];
return isSquare && !(lengths[0] == 0);
}
private int findDistance(int[] p, int[] q) {
return (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]);
}
}
python
class Solution:
def validSquare(self, p1: List[int], p2: List[int], p3: List[int], p4: List[int]) -> bool:
def dist(a, b):
return (a[0] - b[0])**2+(a[1]-b[1])**2
p1, p2, p3, p4 = tuple(sorted([p1, p2, p3, p4]))
if p1 == p2 or p2==p3 or p3==p4:
return False
return dist(p1, p2) == dist(p1, p3) and dist(p2, p4) == dist(p3, p4) and dist(p1, p4) == dist(p2, p3)