【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));
    }
}

【Java】LeetCode 593. 有效的正方形_第1张图片

你可能感兴趣的:(有趣的面试题,leetcode,java)