Valid Square

LeetCode Q 593 - Valid Square

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.

Solution

Code:

public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
  
  int[][] p = {p1, p2, p3, p4};
  
  Arrays.sort(p, (a, b) -> {
    if (a[0] != b[0])
      return a[0] - b[0];
    return a[1] - b[1];
  });
  
  return dist(p[0], p[1]) != 0 
    && dist(p[0], p[1]) == dist(p[1], p[3]) 
    && dist(p[1], p[3]) == dist(p[3], p[2])
    && dist(p[3], p[2]) == dist(p[2], p[0])
    && dist(p[2], p[0]) == dist(p[0], p[1])
    && dist(p[3], p[0]) == dist(p[2], p[1]);
}

private int dist (int[] p1, int[] p2) {
  return (p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1]); 
}

   Reprint policy


《Valid Square》 by Tong Shi is licensed under a Creative Commons Attribution 4.0 International License
  TOC