給定二維空間中四點的坐标,傳回四點是否可以構造一個正方形。
一個點的坐标(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