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