【Java】LeetCode 593. 有效的正方形

给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。
一个点的坐标(x,y)由一个有两个整数的整数数组表示。
注意:
所有输入整数都在 [-10000,10000] 范围内。
一个有效的正方形有四个等长的正长和四个等角(90度角)。
输入点没有顺序。

判断对角线比较简单,正方形对角线需要:

① 相等
②相互垂直
③中点重合

满足这两个即可判定是正方形
而如果用边判断就比较麻烦,要判断四条边垂直相等,由于点的顺序不确定,带来很多麻烦
对角线就只要两两组合即可,对顺序要求不高
class Solution {
    public boolean h(int[] p1, int[] p2, int[] p3, int[] p4){
        boolean flag=true;
        //对角线要相等
        flag=flag&&(Math.pow(p1[0]-p2[0],2)+Math.pow(p1[1]-p2[1],2)==Math.pow(p3[0]-p4[0],2)+Math.pow(p3[1]-p4[1],2));
        //对角线要垂直
        flag=flag&&(0==((p1[0]-p2[0])*(p3[0]-p4[0])+(p1[1]-p2[1])*(p3[1]-p4[1])));
        //对角线中心要重合
        flag=flag&&(p1[0]+p2[0]==p3[0]+p4[0])&&(p1[1]+p2[1]==p3[1]+p4[1]);
        return flag;

    }
    //点重合判断
    public boolean h2(int[] p1, int[] p2){
        return p1[0]-p2[0]!=0||p1[1]-p2[1]!=0;
    }
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        return (h2(p1,p2))&&(h(p1,p2,p3,p4)||h(p1,p3,p2,p4)||h(p1,p4,p3,p2));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值