leetcode 223 Retangle Area

题目要求:求两个长方形的总面积(长方形长和x周平行,宽和y轴平行)

tags:math

思路:求重合边的长度,然后求得重合面积。总面积为两个长方形的面积和减去重合面积。

我的代码:

情况1:如果长方形有一对边是分离的,则两个长方形不相交
情况2:如果长方形有一对边是包含的,则短边乘以另一对边相交长度,则为重合面积
情况3:两对边都是包含一部分,则重合面积为两边相交长度乘机
由上分析可得,3种情况可以合并成为计算每对边交合长度来计算其重合面积。

	public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
		int mutualACEG = 0;
        if(A>E){//E在A左边
        	if(A>G){//G在A左边
        		mutualACEG = 0;
            }else if(A<=G&&C>=G){//G在AC中间
            	mutualACEG = G-A;
            }else{//G在C左边
            	mutualACEG = C-A;
            }
        }else if(A<=E&&C>=E){//E在AC中间
        	if(A<=G&&C>=G){//G在AC中间
        		mutualACEG = G-E;
            }else{//G在C右边
            	mutualACEG = C-E;
            }
        }else{//E在C右边
        	mutualACEG = 0;
        }
        
        int mutualBDFH = 0;
        if(B>F){//F在B下边
        	if(B>H){//H在B下边
        		mutualBDFH = 0;
            }else if(B<=H&&D>=H){//H在BD中间
            	mutualBDFH = H-B;
            }else{//H在D上边
            	mutualBDFH = D-B;
            }
        }else if(B<=F&&D>=F){//F在BD中间
        	if(B<=H&&D>=H){//H在BD中间
        		mutualBDFH = H-F;
            }else{//H在D上边
            	mutualBDFH = D-F;
            }
        }else{//F在D上边
        	mutualBDFH = 0;
        }
        return (C-A)*(D-B)+(G-E)*(H-F)-mutualACEG*mutualBDFH;
    }


如果只是考虑重合面积

//别人的思路,只需要知道小的点的最大点,和大的点的最小点,即可获得共同长度
	//由于两个长方形不分先后,所以可以通过比大小来操作
	public int computeArea2(int A, int B, int C, int D, int E, int F, int G, int H) {
		int left = Math.max(A,C);
		int right = Math.max(Math.min(C, G),left);
		int bottom = Math.max(B, F);
		int top = Math.max(Math.min(D,H), bottom);
        return (C-A)*(D-B)+(G-E)*(H-F)-(right-left)*(top-bottom);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值