博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
能否完美地拼成矩形
阅读量:4228 次
发布时间:2019-05-26

本文共 2119 字,大约阅读时间需要 7 分钟。

function isPerfectRectangle(matrix) {    if (!matrix.length || !matrix[0].length) {        return false    }    let left = Infinity    let right = -Infinity    let top = -Infinity    let bottom = Infinity    let area = 0    let set = new Set()    matrix.forEach(rect => {        left = Math.min(left, rect[0])        right = Math.max(right, rect[2])        top = Math.max(top, rect[3])        bottom = Math.min(bottom, rect[1])        area += (rect[2] - rect[0]) * (rect[3] - rect[1])        // 用数组表示顶点不是挺好,为什么要join成字符串呢?        // 因为数组是引用类型,即使set里边有一个点[1,3],用has判断set里边是否有[1,3]还是会返回false        // 这个时候就不会将set里边已经存在的那个点删除掉,而是再次add一个相同的点        // 当然,再次add也没有作用,但是也不会报错        let left_top = [rect[0], rect[3]].join('_')        let left_bottom = [rect[0], rect[1]].join('_')        let right_top = [rect[2], rect[3]].join('_')        let right_bottom = [rect[2], rect[1]].join('_')        if (set.has(left_top)) {            set.delete(left_top)        } else {            set.add(left_top)        }        if (set.has(left_bottom)) {            set.delete(left_bottom)        } else {            set.add(left_bottom)        }        if (set.has(right_top)) {            set.delete(right_top)        } else {            set.add(right_top)        }        if (set.has(right_bottom)) {            set.delete(right_bottom)        } else {            set.add(right_bottom)        }    });    // 如果最终set里边不是仅仅包含最终的大矩形的4个顶点,那么一定不能完美拼成矩形,返回false    if (!set.has([left, top].join('_')) || !set.has([left, top].join('_')) || !set.has([left, top].join('_')) || !set.has([left, top].join('_')) || set.size !== 4) {        return false    }    // 这个地方一定不能直接返回true,除了满足上面的条件,所有的小矩形的面积加起来等于最终的大矩形的面积时,才能说明可以完美拼成矩形,可以参考我给出的matrix3画图看看就明白了    return area === (right - left) * (top - bottom)}let matrix = [    [1, 1, 3, 3],    [3, 1, 4, 2],    [1, 3, 2, 4],    [3, 2, 4, 4],];let matrix2 = [    [1, 1, 3, 3],    [3, 1, 4, 2],    [1, 3, 3, 4],    [3, 2, 4, 4],];let matrix3 = [    [0, 0, 3, 3],    [1, 0, 4, 3],    [0, 1, 3, 4],    [1, 1, 4, 4],    [1, 1, 3, 3],    [0, 1, 4, 3],    [1, 0, 3, 4],]console.log(isPerfectRectangle(matrix3))

转载地址:http://ktdqi.baihongyu.com/

你可能感兴趣的文章
Ozone 与 HDDS 的区别与联系
查看>>
maven失败测试用例rerun插件使用方法
查看>>
Python基础(三)
查看>>
Python入门NLP(二)
查看>>
四行Python代码,你也能从图片上识别文字!
查看>>
内网映射外网工具-ngrok
查看>>
Python带你朗读网页
查看>>
关于python,这些知识点你学会了吗?
查看>>
利用selenium爬取《西虹市首富影评》
查看>>
Python验证码识别
查看>>
机器学习、NLP和Python教程分享
查看>>
AWS Serverless培训分享
查看>>
python生成二维码
查看>>
在ubuntu上搭建文件服务器
查看>>
ServiceFabric: 在Windows上创建容器应用并部署到ServiceFabric中
查看>>
paramiko——一个专门为Linux设计的模块
查看>>
一个有趣的python项目---一个好玩的网站
查看>>
git常用命令总结
查看>>
Protobuf了解一下?
查看>>
超越Selenium的存在---Pyppeteer
查看>>