二元矩阵是一个二维数组,每个单元中仅包含 1 和 0 元素。二元矩阵的水平对称性意味着如果第一行与最后一行相同,第二行与倒数第二行相同,依此类推。类似地,垂直对称意味着第一列和最后一列、倒数第二列和倒数第二列等是否相同。在这个问题中,我们给定一个矩阵,我们将检测其中是否存在水平和垂直对称性。
输入1 0 10 0 0 1 0 1
输出both, horizontal and vertical symmetry is present.
解释-第一行和最后一行相同,这意味着存在水平对称。同样,第一列和最后一列相同,导致垂直对称。
输入1 0 10 0 0 1 1 0
输出none of the symmetry is present.
说明- 第一行不等于最后一行,第一列不等于最后一列。
方法我们已经看过示例来了解给定的问题,现在让我们看看实现代码的步骤 -
首先,我们将定义一个函数来检查给定矩阵的水平对称性。该函数将采用给定矩阵的单个参数,并返回当前矩阵是否水平对称。
我们将遍历矩阵,对于每一行,我们将与穿过矩阵中间的假想线另一侧的行进行比较,并且与当前行的距离相同。我们将定义一个函数来检查给定矩阵的垂直对称性。该函数将采用一个参数,即给定的矩阵。
我们将遍历矩阵,对于每一列,我们将与穿过矩阵中间的假想线另一侧的列进行比较,并且与当前列的距离相同。我们将调用这两个函数,并根据返回值打印结果。
示例// 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<cols; j++){ if(mat[i][j] != mat[rows-i-1][j]){ return false; } } } return true;}// function to check vertical symmetry function verticalsymm(mat){ var rows = mat.length; var cols = mat[0].length; for(var i = 0; i< cols/2; i++){ for(var j = 0;j<rows; j++){ if(mat[j][i] != mat[j][cols-i-1]){ return false; } } } return true;}// function to check the symmetry of the given matrix function check(mat){ var horsymm = horizontalsymm(mat); var varsymm = verticalsymm(mat); if(horsymm && varsymm){ console.log(both, horizontal and vertical symmetries are present in the given matrix); } else if(horsymm){ console.log(the given binary matrix is only horizontally symmetric); } else if(varsymm){ console.log(the given binary matrix is only vertically symmetric); } else{ console.log(the given binary matrix is neither horizontally symmetric nor vertically symmetric); }}// defining the given matrix var mat = [[1, 0, 1], [0, 0, 0], [1, 0, 1]];console.log(the given matrix is: )console.log(mat);check(mat);// defining the given matrix var mat = [[1, 0, 1], [0, 0, 0], [1, 1, 0]];console.log(the given matrix is: )console.log(mat);check(mat);
输出the given matrix is: [ [ 1, 0, 1 ], [ 0, 0, 0 ], [ 1, 0, 1 ] ]both, horizontal and vertical symmetries are present in the given matrixthe 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) 的程序。
以上就是javascript 程序检查二进制矩阵中的水平和垂直对称性的详细内容。
