Leetcode 593.有效正方形

有效正方形

给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。

一个点的坐标(x,y)由一个有两个整数的整数数组表示。

示例:

输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]

输出: True

注意:

  1. 所有输入整数都在 [-10000,10000] 范围内。
  2. 一个有效的正方形有四个等长的正长和四个等角(90度角)。
  3. 输入点没有顺序。

 1 public class Solution {
 2     public double dist(int[] p1, int[] p2) {
 3         return (p2[1] - p1[1]) * (p2[1] - p1[1]) + (p2[0] - p1[0]) * (p2[0] - p1[0]);
 4     }
 5     public boolean check(int[] p1, int[] p2, int[] p3, int[] p4) {
 6         return dist(p1,p2) > 0 && dist(p1, p2) == dist(p2, p3) && dist(p2, p3) == dist(p3, p4) && dist(p3, p4) == dist(p4, p1) && dist(p1, p3) == dist(p2, p4);
 7     }
 8     public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
 9         int[][] p = {p1,p2,p3,p4};
10         return checkAllPermutations(p, 0);
11     }
12     boolean checkAllPermutations(int[][] p, int l) {
13         if (l == 4) {
14             return check(p[0], p[1], p[2], p[3]);
15         } else {
16             boolean res = false;
17             for (int i = l; i < 4; i++) {
18                 swap(p, l, i);
19                 res |= checkAllPermutations(p, l + 1);
20                 swap(p, l, i);
21             }
22             return res;
23         }
24     }
25     public void swap(int[][] p, int x, int y) {
26         int[] temp = p[x];
27         p[x] = p[y];
28         p[y] = temp;
29     }
30 }

原文地址:https://www.cnblogs.com/kexinxin/p/10381401.html

时间: 2024-07-29 20:13:27

Leetcode 593.有效正方形的相关文章

leetcode 火柴拼正方形 深搜

还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到. 输入为小女孩拥有火柴的数目,每根火柴用其长度表示.输出即为是否能用所有的火柴拼成正方形. 示例?1: 输入: [1,1,2,2,2] 输出: true 解释: 能拼成一个边长为2的正方形,每边两根火柴. 示例?2: 输入: [3,3,3,3,4] 输出: false 解释: 不能用所有火柴拼成一个正方形. 来源:力扣(LeetC

[LeetCode] 221. 最大正方形(DP)

题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximal-square 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 题解 dp[i][j] 表示以matrix[i-1][j-1]为右下角的最大正方形的边长 转移方

[leetcode] 221. 最大正方形

221. 最大正方形 其实这题是85. 最大矩形的特殊情况,我们将85题代码稍微改一下,然后直接套用即可. 此题要求是正方形,那么我们在计算长与宽时,取短的那条然后平方即可. class Solution { public int maximalSquare(char[][] matrix) { return maximalRectangle(matrix); } public int maximalRectangle(char[][] matrix) { int m = matrix.leng

C#刷遍Leetcode面试题系列连载(5):No.593 - 有效的正方形

上一篇 LeetCode 面试题中,我们分析了一道难度为 Easy 的数学题 - 自除数,提供了两种方法.今天我们来分析一道难度为 Medium 的面试题. 系列教程索引 传送门:https://enjoy233.cnblogs.com/articles/leetcode_csharp_index.html C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介 C#刷遍Leetcode面试题系列连载(2): No.38 - 报数 C# 刷遍 Leetcode 面试题系列连载(3):

[LeetCode] 221. Maximal Square 最大正方形

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area. For example, given the following matrix: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 Return 4. Credits:Special thanks to @Freezen for addin

Leetcode 221.最大的正方形

最大的正方形 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 判断以某个点为正方形右下角时最大的正方形时,那它的上方,左方和左上方三个点也一定是某个正方形的右下角,否则该点为右下角的正方形最大就是它自己了.这是定性的判断,那具体的最大正方形边长呢?我们知道,该点为右下角的正方形的最大边长,最多比它的上方,左方和左上方为右下角的正方形的边长多1,最好的情

Leetcode 473.火柴拼正方形

火柴拼正方形 还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到. 输入为小女孩拥有火柴的数目,每根火柴用其长度表示.输出即为是否能用所有的火柴拼成正方形. 示例 1: 输入: [1,1,2,2,2] 输出: true 解释: 能拼成一个边长为2的正方形,每边两根火柴. 示例 2: 输入: [3,3,3,3,4] 输出: false 解释: 不能用所有火柴拼成一个正方形. 注意:

leetcode第221题(最大正方形)的本地IDE实现及变形

问题描述: 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积.PS:本文也对只包含0的最大正方形面积进行了运算 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4  收获: 1.vector<string>v可以写成类似二维数组的形式 即v[i][j]代表一个字符 2.多维向量的声明及初始化line27:vector<vector<int>>dp(row,vector<int

[LeetCode]最大系列(最大正方形221,最大加号标志764)

221. 最大正方形 题目描述: 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 思路: 这道题是动态规划,所以我们要找到动态方程 dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1 举个例子 1 0 1 0 0 1 0 1 1 1 1 1 1 2 2 1 0 0 1 0 代码: class Sol