想象我们有一个图像。我们将此图像表示为一个简单的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");
}
暂无答案!
目前还没有任何答案,快来回答吧!