LeetCode 593. 有效的正方形(C、C++、python)
阿新 • • 發佈:2018-11-21
給定二維空間中四點的座標,返回四點是否可以構造一個正方形。
一個點的座標(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