[Leetcode学习-java]Valid Square

问题:

难度:medium

说明:

输入四个数组,每个数组都是 int[2] 的元素 表示坐标点,然后判断坐标点是否可以连成一个正方形,输入的点没有排序。

题目连接:https://leetcode.com/problems/valid-square/

输入范围:

点坐标值会在 [-10000, 10000]

四个坐标点必定成直角

输入案例:

Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
Output: True

我的代码:

因为输入四个数组,主要还是看怎么写代码才简洁,而不是 p1 p2 p3 p4 这样子写,代码肯定很长很难看。

幸好坐标值不会超出 int 范围,而且四个坐标一定是直角,然后正方形的话每个点可以连接三条边,必定是 有两条相等邻边,一条长斜边。我可以用 ^ 运算来排除掉相等的邻边,然后看看是不是等于最长边值就可以区分掉长方形,判断是否是0可以排除同一个点的问题

class Solution {
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        int[][] arr = new int[][]{p1, p2, p3, p4};
        
        for(int i = 0;i < 4;i ++) {
            int temp = 0, max = 0;
            for(int j = 0;j < 4;j ++) {
                if(i == j) continue;
                int count = (int)Math.pow(arr[j][0] - arr[i][0], 2) + (int)Math.pow(arr[j][1] - arr[i][1], 2);
                temp = Math.max(temp, count);
                if(count == 0) return false; else max ^= count;
            }
            if(temp != max) return false;
        }
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_28033719/article/details/109637745