Leetcode 593 javascript解决方案
发布日期:2021-08-30 16:01:50 浏览次数:4 分类:技术文章

本文共 1907 字,大约阅读时间需要 6 分钟。

题意

给4个点的坐标,判断能不能形成正方形

 

解决思路

取第一个点为基点,向另外3个点划线,3根的长度不是 1 : 1 : 根号2 的优先淘汰。

对3根线排序,获取第一个点的假想对角点,算作point1,计算point1跟另外2个点的距离,不相等的也out。

获取point1根第一个点的距离,如果跟之前3根线中最长线长度不一致,也out。

剩下的都通过。

 

tricky

javascript的浮点数运算很麻烦, 还好有:

function strip(num, precision = 12) {
return +parseFloat(num.toPrecision(precision));}复制代码

 

源码

/** * @param {number[]} p1 * @param {number[]} p2 * @param {number[]} p3 * @param {number[]} p4 * @return {boolean} */var validSquare = function(p1, p2, p3, p4) {
if((p1[0] === p2[0]) && (p2[0] === p3[0]) && (p3[0] === p4[0]) && (p1[1] === p2[1]) && (p2[1] === p3[1]) && (p3[1] === p4[1])){
return false;
}
function strip(num, precision = 12) {
return +parseFloat(num.toPrecision(precision));
}
let line1 = Math.sqrt(Math.pow((p1[0] - p2[0]), 2) + Math.pow((p1[1] - p2[1]), 2));
let line2 = Math.sqrt(Math.pow((p1[0] - p3[0]), 2) + Math.pow((p1[1] - p3[1]), 2));
let line3 = Math.sqrt(Math.pow((p1[0] - p4[0]), 2) + Math.pow((p1[1] - p4[1]), 2));
let list = [{
keyA: 1,
keyB: 2,
value: line1
}, {
keyA: 1,
keyB: 3,
value: line2
}, {
keyA: 1,
keyB: 4,
value: line3
}];
list.sort((a, b) => a.value - b.value);
if(strip(list[0].value) !== strip(list[1].value)){
return false;
}
if(strip(Math.sqrt(2) * list[1].value) !== strip(list[2].value)){
return false;
}
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
this.p4 = p4;
let point1 = this['p' + list[2].keyB];
let point2 = this['p' + list[0].keyB];
let point3 = this['p' + list[1].keyB];
let line4 = Math.sqrt(Math.pow((point1[0] - point2[0]), 2) + Math.pow((point1[1] - point2[1]), 2));
let line5 = Math.sqrt(Math.pow((point1[0] - point3[0]), 2) + Math.pow((point1[1] - point3[1]), 2));
if(strip(line4) !== strip(line5)){
return false;
}
let line6 = Math.sqrt(Math.pow((point1[0] - p1[0]), 2) + Math.pow((point1[1] - p1[1]), 2));
if(strip(line6) !== strip(list[2].value)){
return false;
}
return true;};复制代码

转载于:https://juejin.im/post/5af86591f265da0b8d4206cd

转载地址:https://blog.csdn.net/weixin_34038652/article/details/91470514 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:区块链软件公司:区块链正在“入侵”你的日常生活。
下一篇:Vue+Video.js播放m3u8视频流

发表评论

最新留言

不错!
[***.172.111.71]2022年05月22日 08时46分23秒