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.
every two points distance will have 2 different result for a square
class Solution {
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
int[][] points = new int[][]{p1,p2,p3,p4};
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 4; i++) {
for(int j = i + 1; j < 4; j++) {
set.add(calcDis(points[i], points[j]));
}
}
return !set.contains(0) && set.size() == 2;
}
public int calcDis(int[] p1, int[] p2) {
return (p2[0] - p1[0]) * (p2[0] - p1[0]) + (p2[1] - p1[1]) * (p2[1] - p1[1]);
}
}
}