wap接收图像并返回所有0个矩形的坐标——左上角和右下角;或左上角,宽度和高度

lo8azlld  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(286)

想象我们有一个图像。我们将此图像表示为一个简单的2d数组,其中每个像素都是1或0。
众所周知,你得到的图像在1的背景上可能有许多0的不同矩形。编写一个函数,接收图像并返回所有0个矩形的坐标——左上角和右下角;或左上角,宽度和高度。

image1 = [
[0, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 1],
[1, 0, 1, 1, 1, 1, 1],
[1, 0, 1, 0, 0, 1, 1],
[1, 1, 1, 0, 0, 1, 1],
[1, 1, 1, 1, 1, 1, 0],
]

Sample output variations (only one is necessary):

findRectangles(image1) =>
// (using top-left-row-column and bottom-right):
[
[[0,0],[0,0]],
[[2,0],[2,0]],
[[2,3],[3,5]],
[[3,1],[5,1]],
[[5,3],[6,4]],
[[7,6],[7,6]],
]
// (using top-left-x-y and width/height):
[
[[0,0],[1,1]],
[[0,2],[1,1]],
[[3,2],[3,2]],
[[1,3],[1,3]],
[[3,5],[2,2]],
[[6,7],[1,1]],
]

Other test cases:

image2 = [
[0],
]

findRectangles(image2) =>
// (using top-left-row-column and bottom-right):
[
[[0,0],[0,0]],
]

// (using top-left-x-y and width/height):
[
[[0,0],[1,1]],
]

image3 = [
[1],
]

findRectangles(image3) => []

image4 = [
[1, 1, 1, 1, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 1],
]

findRectangles(image4) =>
// (using top-left-row-column and bottom-right or top-left-x-y and width/height):
[
[[1,1],[3,3]],
]

n: number of rows in the input image
m: number of columns in the input image

* /

下面是我编写的代码,用于查找矩形,但不确定如何创建输出矩阵,如问题中所示。
我的方法是从上到下逐行扫描。对于每一行,记住21的每一个组合,并将其放入一个哈希集中。如果我们再找到那个组合,就意味着它是一个矩形。

public static boolean isRectangle(int matrix[][]) {
        // finding row and column size
        int rows = matrix.length;
        if (rows == 0)
            return false;
        int columns = matrix[0].length;

        /*
         * y1=0 x1=1
         *      x2=2
         * */

        HashMap  > table = new HashMap  ();
        int output[][];

        for (int y1 = 0; y1  set = new HashSet  ();
                            set.add(x2);
                            table.put(x1, set);
                        } else {
                            table.get(x1).add(x2);
                        }
                        if (!table.containsKey(x2)) {
                            HashSet  set = new HashSet  ();
                            set.add(x1);
                            table.put(x2, set);
                        } else {
                            table.get(x2).add(x1);
                        }
                    }
                }
            }
        }
        return false;
    }

    public static void main(String args[]) {
        int mat[][] = {
            {
                1,
                1,
                0,
                0,
                1
            },
            {
                1,
                1,
                1,
                0,
                0
            },
            {
                0,
                1,
                0,
                1,
                0
            },
            {
                0,
                0,
                0,
                0,
                1
            }
        };

        if (isRectangle(mat))
            System.out.print("TRUE");
        else
            System.out.print("FALSE");
    }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题