Valid Square
这里可以用暴力计算任意两点间的距离,再统计这些距离出现了多少次来判断,这里还有一种排序的方法,因为如果我们按照横坐标大小以及横坐标一样的纵坐标小的在前的规则排序,则第一个点和最后一个点的连线必然是对角线,我们只需要判断四边长和两对角线是否互相相等就行了
class Solution(object):
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
"""
dist = lambda x, y : abs(y[1] - x[1]) + abs(y[0] - x[0])
nums = [p1, p2, p3, p4]
def comparator(A, B):
if A[0] != B[0]:
return cmp(A[0], B[0])
return cmp(A[1], B[1])
nums.sort(cmp=comparator)
return dist(nums[0], nums[1]) == dist(nums[0], nums[2]) == dist(nums[1], nums[3]) == dist(nums[2], nums[3]) != 0 and dist(nums[0], nums[3]) == dist(nums[1], nums[2])
这里还可以像刚才说的用暴力计边长然后对比
class Solution(object):
def validSquare(self, p1, p2, p3, p4):
nums = [p1, p2, p3, p4]
store = collections.Counter()
dist = lambda x, y: abs(y[1] - x[1]) ** 2 + abs(y[0] - x[0]) ** 2
for i in xrange(4):
for j in xrange(i + 1, 4):
store[dist(nums[i], nums[j])] += 1
return sorted(store.values()) == [2, 4]