
二元矩阵是一个二维数组,每个单元中仅包含 1 和 0 元素。二元矩阵的水平对称性意味着如果第一行与最后一行相同,第二行与倒数第二行相同,依此类推。类似地,垂直对称意味着第一列和最后一列、倒数第二列和倒数第二列等是否相同。在这个问题中,我们给定一个矩阵,我们将检测其中是否存在水平和垂直对称性。
输入
1 0 1 0 0 0 1 0 1
输出
Both, horizontal and vertical symmetry is present.
解释-第一行和最后一行相同,这意味着存在水平对称。同样,第一列和最后一列相同,导致垂直对称。
输入
1 0 1 0 0 0 1 1 0
输出
None of the symmetry is present.
说明- 第一行不等于最后一行,第一列不等于最后一列。
方法
我们已经看过示例来了解给定的问题,现在让我们看看实现代码的步骤 -
立即学习“Java免费学习笔记(深入)”;
首先,我们将定义一个函数来检查给定矩阵的水平对称性。该函数将采用给定矩阵的单个参数,并返回当前矩阵是否水平对称。
我们将遍历矩阵,对于每一行,我们将与穿过矩阵中间的假想线另一侧的行进行比较,并且与当前行的距离相同。 p>
我们将定义一个函数来检查给定矩阵的垂直对称性。该函数将采用一个参数,即给定的矩阵。
我们将遍历矩阵,对于每一列,我们将与穿过矩阵中间的假想线另一侧的列进行比较,并且与当前列的距离相同。 p>
我们将调用这两个函数,并根据返回值打印结果。
示例
// function to check horizontal symmetry
function horizontalSymm(mat){
var rows = mat.length;
var cols = mat[0].length;
for(var i = 0; i< rows/2; i++){
for(var j = 0;j
输出
The given matrix is:
[ [ 1, 0, 1 ], [ 0, 0, 0 ], [ 1, 0, 1 ] ]
Both, horizontal and vertical symmetries are present in the given matrix
The given matrix is:
[ [ 1, 0, 1 ], [ 0, 0, 0 ], [ 1, 1, 0 ] ]
The given binary matrix is neither horizontally symmetric nor vertically symmetric
时间和空间复杂度
上述代码的时间复杂度为 O(N*M),其中 N 是给定矩阵的行数,M 是给定矩阵的列数。我们将遍历整个矩阵两次,一次是水平对称,另一次是垂直对称。
上述代码的空间复杂度为 O(1),因为我们没有使用任何额外的空间。
结论
在本教程中,我们实现了一个 JavaScript 程序来查找给定的矩阵,当前矩阵是否水平或垂直对称。二元矩阵的水平对称性意味着如果第一行与最后一行相同,则第二行与倒数第二行完全相同,依此类推。类似地,垂直对称意味着第一列和最后一列、倒数第二列和倒数第二列等是否相同。我们实现了一个时间复杂度为 O(N*M)、空间复杂度为 O(1) 的程序。










