LeetCode刷題——Valid square有效正方形

有效正方形題目的思路探討與源碼
有效正方形的題目如下圖,該題屬於數學類的題目,主要考察對於正方形的理解,通過邊長和對角線的長度進行理解,可以判斷能否構造正方形。雖然屬於中級但是難度相對較低。只要枚舉並判斷即可。
在這裏插入圖片描述
本人在看到該題目後,認爲可以通過角度+邊長或者對角線+邊長進行確定是否正方形,然後分別對座標值進行平方和計算,然後將之轉化爲set集合進行去重,去重以後集合中有且僅有兩個值,如果互相之間還是2倍或者1/2倍關係,那麼就是正方形了。代碼如下所示:

#噴火龍與水箭龜
p1=[0,0]
p2=[0,1]
p3=[1,0]
p4=[1,1]
a1=pow((p1[0]-p2[0]),2)+pow((p1[1]-p2[1]),2)
a2=pow((p2[0]-p3[0]),2)+pow((p2[1]-p3[1]),2)
a3=pow((p3[0]-p4[0]),2)+pow((p3[1]-p4[1]),2)
a4=pow((p4[0]-p1[0]),2)+pow((p4[1]-p1[1]),2)
a5=pow((p1[0]-p3[0]),2)+pow((p1[1]-p3[1]),2)
a6=pow((p2[0]-p4[0]),2)+pow((p2[1]-p4[1]),2)
resSet=set()
resSet.add(a1)
resSet.add(a2)
resSet.add(a3)
resSet.add(a4)
resSet.add(a5)
resSet.add(a6)
resList=list(resSet)
if(len(resSet)!=2):
	print(False)
elif(resList[0]/resList[1]==2 or resList[0]/resList[1]==1/2):
	print(True)
else:
	print(False)

在上述代碼中,a1/a2/a3/a4/a5/a6 分別代表計算後的值,可能是對角線或者邊長,轉爲集合後再轉爲列表,判斷是否滿足條件即可,最終得到結果。
最終輸入是p1=[0,0] ,p2=[0,1] , p3=[1,0] ,p4=[1,1] ,得到結果True ,是正確的。需要注意的是,本代碼是作者的測試代碼,如需放到LeetCode上運行,需要進行函數縮進和加上返回值纔可以運行。
最終結果如下:
在這裏插入圖片描述
從結果來說是速度是較爲一般,但是應該可以進一步提速,希望朋友們能夠多多指教,非常感謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章