391 Perfect Rectangle 完美矩形

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

详见:https://leetcode.com/problems/perfect-rectangle/description/

C++:

    class Solution {  
    public:  
        bool isRectangleCover(vector<vector<int>>& rectangles) {  
            unordered_map<string, int> hash;  
            for(auto val: rectangles)  
            {  
                for(int i = 0; i < 4; i++)  
                {  
                    string tem = to_string(val[i/2*2])+','+to_string(val[i%2*2+1]);  
                    if(hash[tem]&(1<<i))
                    {
                        return false;  
                    }
                    hash[tem] |= (1<<i);  
                }  
            }  
            int cntCorner = 0;  
            for(auto& val: hash)  
            {  
                int sec = val.second;  
                if(!(sec&(sec-1)) && cntCorner++ > 4)
                {
                    return false;  
                }
                if((sec&(sec-1)) && !(sec==3||sec==12||sec==5||sec==10||sec==15))   
                {
                    return false;
                }   
            }  
            return true;  
        }  
    };  

 参考:https://blog.csdn.net/qq508618087/article/details/52483625

posted on 2018-04-15 21:30  lina2014  阅读(191)  评论(0编辑  收藏  举报

导航