ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[LC593]有效的正方形-Valid Square

2022-07-30 00:31:08  阅读:208  来源: 互联网

标签:p2 p1 ok int len Valid Square return LC593


题目描述

给定2D空间中四个点的坐标 p1, p2, p3 和 p4,如果这四个点构成一个正方形,则返回 true 。
点的坐标 pi 表示为 [xi, yi] 。输入 不是 按任何顺序给出的。
一个 有效的正方形 有四条等边和四个等角(90度角)。
链接:https://leetcode.cn/problems/valid-square

基本思路

正方形的一个集合特点是,任意三个点都可以组成一个等腰直角三角形,等腰直角三角形是易于判断的,那么我们可以按顺序的选择四个点中的三个,依次去检测是否是等腰三角形,即可确认最后四个点是否可以组成正方形。

代码

Golang
func validSquare(p1 []int, p2 []int, p3 []int, p4 []int) bool {
	ok, len := isTriangle(p1, p2, p3, -1)
	if !ok {
		return false
	}
	ok, len = isTriangle(p4, p2, p3, len)
	if !ok {
		return false
	}
	ok, len = isTriangle(p1, p4, p3, len)
	if !ok {
		return false
	}
	ok, _ = isTriangle(p1, p2, p4, len)
	return ok
}

func min(i1 int, i2 int) int {
	if i1 > i2 {
		return i2
	}
	return i1
}

func getDist(p1 []int, p2 []int) int {
	return (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1])
}

func isTriangle(p1 []int, p2 []int, p3 []int, len int) (bool, int) {
	l1 := getDist(p1, p2)
	l2 := getDist(p2, p3)
	l3 := getDist(p1, p3)
	ok := l1+l2 == l3 || l1+l3 == l2 || l2+l3 == l1
	if !ok {
		return false, -1
	}
	if len == -1 {
		len = min(l1, l2)
	} else if len == 0 || len != min(l1, l2) {
		return false, -1
	}
	return ok, len
}

标签:p2,p1,ok,int,len,Valid,Square,return,LC593
来源: https://www.cnblogs.com/xy1997/p/16534063.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有