593. Valid Square

LeetCode medium original: C# #array #csharp #leetcode #medium
题目文本会按所选界面语言从俄语翻译;代码保持不变。

given координаты четырех точек в 2D-пространстве p1, p2, p3 и p4. return true, если эти четыре точки образуют квадрат.

Координата точки pi представлена как [xi, yi]. Ввод не дан в каком-либо определенном порядке.

Корректный квадрат имеет четыре равные стороны с положительной длиной и четыре равных угла (по 90 градусов).

示例:

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

Output: true

C# 解法

匹配/原始
public class Solution {
    private int Dist(int[] p1, int[] p2) {
        return (p2[1] - p1[1]) * (p2[1] - p1[1]) + (p2[0] - p1[0]) * (p2[0] - p1[0]);
    }
    private bool Check(int[] p1, int[] p2, int[] p3, int[] p4) {
        return Dist(p1, p2) > 0 &&
               Dist(p1, p2) == Dist(p2, p3) &&
               Dist(p2, p3) == Dist(p3, p4) &&
               Dist(p3, p4) == Dist(p4, p1) &&
               Dist(p1, p3) == Dist(p2, p4);
    }
    public bool ValidSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        return Check(p1, p2, p3, p4) ||
               Check(p1, p3, p2, p4) ||
               Check(p1, p2, p4, p3);
    }
}

C++ 解法

自动草稿,提交前请检查
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    private int Dist(vector<int>& p1, vector<int>& p2) {
        return (p2[1] - p1[1]) * (p2[1] - p1[1]) + (p2[0] - p1[0]) * (p2[0] - p1[0]);
    }
    private bool Check(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
        return Dist(p1, p2) > 0 &&
               Dist(p1, p2) == Dist(p2, p3) &&
               Dist(p2, p3) == Dist(p3, p4) &&
               Dist(p3, p4) == Dist(p4, p1) &&
               Dist(p1, p3) == Dist(p2, p4);
    }
    public bool ValidSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
        return Check(p1, p2, p3, p4) ||
               Check(p1, p3, p2, p4) ||
               Check(p1, p2, p4, p3);
    }
}

Java 解法

匹配/原始
public class Solution {
    public double dist(int[] p1, int[] p2) {
        return (p2[1] - p1[1]) * (p2[1] - p1[1]) + (p2[0] - p1[0]) * (p2[0] - p1[0]);
    }
    public boolean check(int[] p1, int[] p2, int[] p3, int[] p4) {
        return dist(p1,p2) > 0 && dist(p1, p2) == dist(p2, p3) && dist(p2, p3) == dist(p3, p4) && dist(p3, p4) == dist(p4, p1) && dist(p1, p3) == dist(p2, p4);
    }
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        return check(p1, p2, p3, p4) || check(p1, p3, p2, p4) || check(p1, p2, p4, p3);
    }
}

JavaScript 解法

匹配/原始
var dist = function(p1, p2) {
    return (p2[1] - p1[1]) ** 2 + (p2[0] - p1[0]) ** 2;
};

var check = function(p1, p2, p3, p4) {
    return dist(p1, p2) > 0 &&
           dist(p1, p2) === dist(p2, p3) &&
           dist(p2, p3) === dist(p3, p4) &&
           dist(p3, p4) === dist(p4, p1) &&
           dist(p1, p3) === dist(p2, p4);
};

var validSquare = function(p1, p2, p3, p4) {
    return check(p1, p2, p3, p4) ||
           check(p1, p3, p2, p4) ||
           check(p1, p2, p4, p3);
};

Python 解法

匹配/原始
class Solution:
    def dist(self, p1, p2):
        return (p2[1] - p1[1]) ** 2 + (p2[0] - p1[0]) ** 2

    def check(self, p1, p2, p3, p4):
        return self.dist(p1, p2) > 0 and \
               self.dist(p1, p2) == self.dist(p2, p3) == self.dist(p3, p4) == self.dist(p4, p1) and \
               self.dist(p1, p3) == self.dist(p2, p4)

    def validSquare(self, p1, p2, p3, p4):
        return self.check(p1, p2, p3, p4) or \
               self.check(p1, p3, p2, p4) or \
               self.check(p1, p2, p4, p3)

Go 解法

匹配/原始
package main

import (
    "math"
)

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

func check(p1, p2, p3, p4 []int) bool {
    return dist(p1, p2) > 0 &&
           dist(p1, p2) == dist(p2, p3) &&
           dist(p2, p3) == dist(p3, p4) &&
           dist(p3, p4) == dist(p4, p1) &&
           dist(p1, p3) == dist(p2, p4)
}

func validSquare(p1, p2, p3, p4 []int) bool {
    return check(p1, p2, p3, p4) ||
           check(p1, p3, p2, p4) ||
           check(p1, p2, p4, p3)
}

Algorithm

Определите функцию для вычисления расстояния между двумя точками.

Проверьте, равны ли все стороны и диагонали для трех уникальных случаев перестановки точек.

return true, если хотя бы одна из проверок проходит.

😎

Vacancies for this task

活跃职位 with overlapping task tags are 已显示.

所有职位
目前还没有活跃职位。