天天看點

LeetCode 593. 有效的正方形(C、C++、python)

給定二維空間中四點的坐标,傳回四點是否可以構造一個正方形。

一個點的坐标(x,y)由一個有兩個整數的整數數組表示。

示例:

輸入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
輸出: True
           

注意:

所有輸入整數都在 [-10000,10000] 範圍内。

一個有效的正方形有四個等長的正長和四個等角(90度角)。

輸入點沒有順序。

C

bool validSquare(int* p1, int p1Size, int* p2, int p2Size, int* p3, int p3Size, int* p4, int p4Size) 
{
    int len1=pow(p1[0]-p2[0],2)+pow(p1[1]-p2[1],2);
    int len2=pow(p1[0]-p3[0],2)+pow(p1[1]-p3[1],2);
    int len3=pow(p1[0]-p4[0],2)+pow(p1[1]-p4[1],2);  
    int len4=pow(p2[0]-p3[0],2)+pow(p2[1]-p3[1],2);
    int len5=pow(p2[0]-p4[0],2)+pow(p2[1]-p4[1],2);
    int len6=pow(p3[0]-p4[0],2)+pow(p3[1]-p4[1],2);
    int a[6]={len1,len2,len3,len4,len5,len6};
    sort(a,0,5);
    if(a[0]>0 && a[0]==a[1] && a[0]==a[2] && a[0]==a[3] && a[4]==a[5])
    {
        return true;
    }
    return false;
}

void sort(int *a, int left, int right)
{
    if(left >= right)
    {
        return ;
    }
    int i = left;
    int j = right;
    int key = a[i]; 
    while(i < j)                            
    {
        while(i < j && key <= a[j])
        {
            j--;
        }       
        a[i] = a[j];
        while(i < j && key >= a[i])
        {
            i++;
        }         
        a[j] = a[i];
    }    
    a[i] = key;
    sort(a, left, i - 1);
    sort(a, i + 1, right);
}
           

C++

#include <math>
class Solution {
public:
    bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) 
    {
        int len1=pow(p1[0]-p2[0],2)+pow(p1[1]-p2[1],2);
        int len2=pow(p1[0]-p3[0],2)+pow(p1[1]-p3[1],2);
        int len3=pow(p1[0]-p4[0],2)+pow(p1[1]-p4[1],2);  
        int len4=pow(p2[0]-p3[0],2)+pow(p2[1]-p3[1],2);
        int len5=pow(p2[0]-p4[0],2)+pow(p2[1]-p4[1],2);
        int len6=pow(p3[0]-p4[0],2)+pow(p3[1]-p4[1],2);
        vector<int> tmp={len1,len2,len3,len4,len5,len6};
        sort(tmp.begin(),tmp.end());
        if(0==tmp[0])
        {
            return false;
        }
        if(tmp[0]==tmp[1] && tmp[0]==tmp[2] && tmp[0]==tmp[3] && tmp[4]==tmp[5])
        {
            return true;
        }
        return false;
    }
};
           

python

class Solution:
    def validSquare(self, p1, p2, p3, p4):
        """
        :type p1: List[int]
        :type p2: List[int]
        :type p3: List[int]
        :type p4: List[int]
        :rtype: bool
        """
        a1=(p1[0]-p2[0])**2+(p1[1]-p2[1])**2
        a2=(p1[0]-p3[0])**2+(p1[1]-p3[1])**2 
        a3=(p1[0]-p4[0])**2+(p1[1]-p4[1])**2
        a4=(p2[0]-p3[0])**2+(p2[1]-p3[1])**2
        a5=(p2[0]-p4[0])**2+(p2[1]-p4[1])**2
        a6=(p3[0]-p4[0])**2+(p3[1]-p4[1])**2
        tmp=[a1,a2,a3,a4,a5,a6]
        tmp.sort()
        if tmp[0]!=0 and tmp[0]==tmp[1] and tmp[0]==tmp[2] and tmp[0]==tmp[3] and tmp[4]==tmp[5]:
            return True
        return False