日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 850. Rectangle Area II | 850. 矩形面积 II(递归分割未重叠矩形)

發布時間:2024/2/28 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 850. Rectangle Area II | 850. 矩形面积 II(递归分割未重叠矩形) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

https://leetcode.com/problems/rectangle-area-ii/

題解

沒有看懂官方答案,評論區有一種解法寫的挺通俗的:

Clean Recursive Solution [Java]

The idea here is to maintain a list of non-overlapping rectangles to calculate final area.
If a new rectangle does not overlap with any of the existing rectanlges, add it to the list.
If there is an overlap, split the non-overlapping regions of the rectangle into smaller rectangles and compare with the rest of the list.

For example, when a new rectangle (green) is compared with the current rectangle (blue), the non-overlapping regions can be split into two smaller rectangles. Rectangle 1 will be covered by the first overlapping case in addRectangle() and rectangle 2 will be covered by the third case. Rectangle 3 overlaps with the current rectangle and need not be considered.

看了之后自己又實現了一遍:

class Solution {// 0左 1下 2右 3上public static final int L = 0;public static final int D = 1;public static final int R = 2;public static final int U = 3;public int rectangleArea(int[][] rectangles) {ArrayList<int[]> list = new ArrayList<>();for (int[] cur : rectangles) {addRec(cur, list, 0);}long sum = 0;for (int[] r : list) {sum += ((long) r[U] - r[D]) * (r[R] - r[L]) % 1000000007;}return (int) (sum % 1000000007);}public void addRec(int[] cur, ArrayList<int[]> list, int index) {// 全部沒有重疊if (index >= list.size()) {list.add(cur);return;}int[] r = list.get(index);// 當前沒有重疊: cur右邊界小于r左邊界|cur左邊界大于r右邊界|cur下邊界大于r上邊界|cur上邊界小于r下邊界if (cur[R] <= r[L] || cur[L] >= r[R] || cur[D] >= r[U] || cur[U] <= r[D]) {addRec(cur, list, index + 1);return;}// cur的左邊界更左if (cur[L] < r[L]) addRec(new int[]{cur[L], cur[D], r[L], cur[U]}, list, index + 1);// cur的右邊界更右if (cur[R] > r[R]) addRec(new int[]{r[R], cur[D], cur[R], cur[U]}, list, index + 1);// cur的下邊界更下if (cur[D] < r[D]) addRec(new int[]{Math.max(cur[L], r[L]), cur[D], Math.min(cur[R], r[R]), r[D]}, list, index + 1);// cur的上邊界更上if (cur[U] > r[U]) addRec(new int[]{Math.max(cur[L], r[L]), r[U], Math.min(cur[R], r[R]), cur[U]}, list, index + 1);} }

總結

以上是生活随笔為你收集整理的leetcode 850. Rectangle Area II | 850. 矩形面积 II(递归分割未重叠矩形)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。