欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java]Valid Square

程序员文章站 2022-07-10 19:51:34
问题:难度: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我的代码:因为输入四个数组,主...

问题:

难度: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;
    }
}

 

本文地址:https://blog.csdn.net/qq_28033719/article/details/109637745

相关标签: Java