iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
1
Software Development

LeetCode30系列 第 14

[LeetCode30] Day6 - 223. Rectangle Area

  • 分享至 

  • xImage
  •  

題目

在座標平面上,給2個矩形,求覆蓋的總面積
每個矩形都由2個座標定義,分別是矩形的左下角與右上角
https://ithelp.ithome.com.tw/upload/images/20200929/201291479QysJXJ4V2.png

解法

因為為任意的2個矩形,所以如果有重疊的地方,必須去扣掉。
那我們需要判斷需要判斷是否有重疊
以x座標看,矩形的右上角座標的x(C) 如果小於 另一個矩行的左下角座標的x(E),則沒有重疊。
以x座標看,矩形的左下角座標的x(A) 如果大於 另一個矩行的右上角座標的x(G),則沒有重疊。
https://ithelp.ithome.com.tw/upload/images/20200929/20129147sSMFmrI0wF.png
https://ithelp.ithome.com.tw/upload/images/20200929/20129147zwAYDyIF80.png
以y座標看,矩形的左下角座標的x(B) 如果大於 另一個矩行的右上角座標的x(H),則沒有重疊。
以y座標看,矩形的右上角座標的x(D) 如果小於 另一個矩行的左下角座標的x(F),則沒有重疊。
https://ithelp.ithome.com.tw/upload/images/20200929/20129147CrUrSmz7d5.png
https://ithelp.ithome.com.tw/upload/images/20200929/20129147MTU5fDAzzE.png
有重疊的話如下
https://ithelp.ithome.com.tw/upload/images/20200929/20129147kEhadj5RI0.png

Code

class Solution {
public:
    int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        int cover_length = 0;
        int cover_width = 0;
        if(E < C && G > A){
            cover_length = min(C, G) - max(A,E);
        }
        
        if(F < D && H > B){
            cover_width = min(D, H) - max(B,F);
        }
        return (C-A)*(D-B) - cover_length*cover_width + (G-E)*(H-F);
    }
};

https://ithelp.ithome.com.tw/upload/images/20200929/20129147ghTFVuuRIB.png


上一篇
[LeetCode30] Day13 - 201. Bitwise AND of Numbers Range
下一篇
[LeetCode30] Day15 - 406. Queue Reconstruction by Height
系列文
LeetCode3030
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言