返回介绍

solution / 0500-0599 / 0593.Valid Square / README_EN

发布于 2024-06-17 01:03:36 字数 4941 浏览 0 评论 0 收藏 0

593. Valid Square

中文文档

Description

Given the coordinates of four points in 2D space p1, p2, p3 and p4, return true _if the four points construct a square_.

The coordinate of a point pi is represented as [xi, yi]. The input is not given in any order.

A valid square has four equal sides with positive length and four equal angles (90-degree angles).

 

Example 1:

Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
Output: true

Example 2:

Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]
Output: false

Example 3:

Input: p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]
Output: true

 

Constraints:

  • p1.length == p2.length == p3.length == p4.length == 2
  • -104 <= xi, yi <= 104

Solutions

Solution 1

class Solution:
  def validSquare(
    self, p1: List[int], p2: List[int], p3: List[int], p4: List[int]
  ) -> bool:
    def check(a, b, c):
      (x1, y1), (x2, y2), (x3, y3) = a, b, c
      d1 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)
      d2 = (x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3)
      d3 = (x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3)
      return any(
        [
          d1 == d2 and d1 + d2 == d3 and d1,
          d2 == d3 and d2 + d3 == d1 and d2,
          d1 == d3 and d1 + d3 == d2 and d1,
        ]
      )

    return (
      check(p1, p2, p3)
      and check(p2, p3, p4)
      and check(p1, p3, p4)
      and check(p1, p2, p4)
    )
class Solution {
  public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
    return check(p1, p2, p3) && check(p1, p3, p4) && check(p1, p2, p4) && check(p2, p3, p4);
  }

  private boolean check(int[] a, int[] b, int[] c) {
    int x1 = a[0], y1 = a[1];
    int x2 = b[0], y2 = b[1];
    int x3 = c[0], y3 = c[1];
    int d1 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
    int d2 = (x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3);
    int d3 = (x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3);
    if (d1 == d2 && d1 + d2 == d3 && d1 > 0) {
      return true;
    }
    if (d1 == d3 && d1 + d3 == d2 && d1 > 0) {
      return true;
    }
    if (d2 == d3 && d2 + d3 == d1 && d2 > 0) {
      return true;
    }
    return false;
  }
}
class Solution {
public:
  bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
    return check(p1, p2, p3) && check(p1, p3, p4) && check(p1, p2, p4) && check(p2, p3, p4);
  }

  bool check(vector<int>& a, vector<int>& b, vector<int>& c) {
    int x1 = a[0], y1 = a[1];
    int x2 = b[0], y2 = b[1];
    int x3 = c[0], y3 = c[1];
    int d1 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
    int d2 = (x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3);
    int d3 = (x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3);
    if (d1 == d2 && d1 + d2 == d3 && d1 > 0) return true;
    if (d1 == d3 && d1 + d3 == d2 && d1 > 0) return true;
    if (d2 == d3 && d2 + d3 == d1 && d2 > 0) return true;
    return false;
  }
};
func validSquare(p1 []int, p2 []int, p3 []int, p4 []int) bool {
  check := func(a, b, c []int) bool {
    x1, y1 := a[0], a[1]
    x2, y2 := b[0], b[1]
    x3, y3 := c[0], c[1]
    d1 := (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)
    d2 := (x1-x3)*(x1-x3) + (y1-y3)*(y1-y3)
    d3 := (x2-x3)*(x2-x3) + (y2-y3)*(y2-y3)
    if d1 == d2 && d1+d2 == d3 && d1 > 0 {
      return true
    }
    if d1 == d3 && d1+d3 == d2 && d1 > 0 {
      return true
    }
    if d2 == d3 && d2+d3 == d1 && d2 > 0 {
      return true
    }
    return false
  }
  return check(p1, p2, p3) && check(p1, p3, p4) && check(p1, p2, p4) && check(p2, p3, p4)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文