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

LeetCode解析------391.完美矩形

程序员文章站 2022-07-13 12:02:31
...

题目:

我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域。
每个矩形用左下角的点和右上角的点的坐标来表示。例如, 一个单位正方形可以表示为 [1,1,2,2]。 ( 左下角的点的坐标为 (1, 1)
以及右上角的点的坐标为 (2, 2) )。

简单介绍:
完美矩形,题目难度:困难,使用语言:JAVA。
第一次接触力扣的困难题,难度还是有点大的。

解题思路:
1.小矩形的面积之和等于大矩形的面积。
这一点,相信大家都可以很容易的想到,基本可以PASS掉图形重复、图形缺失的情况。
但是,该条件对于确保小矩形完美覆盖大矩形还是不够严谨。
所以,我参考了一下大神的思路,引申出来第二点。
2.小矩形之间的连接点只能出现偶数次。
两个小矩形若想组成一个新的矩形,小矩形之间的连接点,出现2次。
四个小矩形若想组成一个新的矩形,小矩形正中的连接点,出现4次,边缘的连接点出现2次。
3.有了1和2这两个条件的约束就可以保证,这个矩形是完美矩形了。

LeetCode解析------391.完美矩形

代码部分:

class Solution {
    public boolean isRectangleCover(int[][] rectangles) {
        int left=Integer.MAX_VALUE;//最左下横坐标
		int bottom=Integer.MAX_VALUE;
		int right=Integer.MIN_VALUE;//最右上横坐标
		int top=Integer.MIN_VALUE;
		int n=rectangles.length;//小矩形个数
		//哈希集合
		Set<String> set=new HashSet<>();
		int area=0;
		for(int i=0;i<n;i++) {
			//获取四个点的坐标
			left=Math.min(left, rectangles[i][0]);
			bottom=Math.min(bottom, rectangles[i][1]);
			right=Math.max(right, rectangles[i][2]);
			top=Math.max(top, rectangles[i][3]);
			//计算小矩形的面积
			area+=(rectangles[i][3]-rectangles[i][1])*(rectangles[i][2]-rectangles[i][0]);
			//计算小矩阵的坐标
			String lt=rectangles[i][0]+","+rectangles[i][1];
			String bm=rectangles[i][0]+","+rectangles[i][3];
			String rt=rectangles[i][2]+","+rectangles[i][1];
			String tp=rectangles[i][2]+","+rectangles[i][3];
			//没有则加入,有则删除
			if(!set.contains(lt)) set.add(lt);
			else set.remove(lt);
			if(!set.contains(bm)) set.add(bm);
			else set.remove(bm);
			if(!set.contains(rt)) set.add(rt);
			else set.remove(rt);
			if(!set.contains(tp)) set.add(tp);
			else set.remove(tp);
		}
			//判断是否是完美矩形:1.面积之和相等 2.只剩下4个坐标
			if(set.size()==4&&set.contains(left+","+bottom)&&set.contains(left+","+top)&&set.contains(right+","+bottom)&&set.contains(right+","+top))
				return area==((top-bottom)*(right-left));
			else return false;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/perfect-rectangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。