Leetcode 593 (凌晨三点的夜晚)

3月21日周五
也许是喝了太多咖啡,导致12点毫无睡意,于是继续在书房呆坐着,还是和往常一样打开leetcode,寻找难度分在1800以下的题,然后就遇到了Leetcode 593。一看题目,四个点能否组成正方形,心想就是4个点,即使暴力也只到256,于是开始冷静的思考,回忆起了初中的数学,终于发现了只要从4个点中任意挑选3个点,这三个点构成的三边有两条边相等,且相等的这两条边的长度的平方和等于第三条边的平方和,就一定能判定这四个点能构成正方形,噌噌噌,代码撸出来了。
593. 有效的正方形

给定2D空间中四个点的坐标 p1, p2, p3 和 p4,如果这四个点构成一个正方形,则返回 true 。
点的坐标 pi 表示为 [xi, yi] 。 输入没有任何顺序 。
一个 有效的正方形 有四条等边和四个等角(90度角)。
示例 1:

输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
输出: true

示例 2:

输入:p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]
输出:false

示例 3:

输入:p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]
输出:true

提示:

p1.length == p2.length == p3.length == p4.length == 2
-10**4 <= xi, yi <= 10**4

Ruby解

# @param {Integer[]} p1
# @param {Integer[]} p2
# @param {Integer[]} p3
# @param {Integer[]} p4
# @return {Boolean}
def valid_square(p1, p2, p3, p4)
  if [p1,p2,p3,p4].uniq.length < 4
    return false
  else
    [p1,p2,p3,p4].combination(3).to_a.all? {|it| cal(it[0],it[1],it[2])}
  end
end

def cal(x,y,z)
  t1 = (x[0] - y[0])**2 + (x[1] - y[1])**2
  t2 = (x[0] - z[0])**2 + (x[1] - z[1])**2
  t3 = (y[0] - z[0])**2 + (y[1] - z[1])**2
  t = [t1,t2,t3].sort
  if t[0] == t[1] && t[0] + t[1] == t[2]
    return true
  else
    return false
  end
end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容