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:

  1. All the input integers are in the range [-10000, 10000].
  2. A valid square has four equal sides with positive length and four equal angles (90-degree angles).
  3. 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]);
    }
}

}

results matching ""

    No results matching ""