Java 中检查两个给定矩阵是否互为镜像

2025年1月7日 | 阅读 4 分钟

在 Java 编程中,确定两个矩阵是否互为镜像图需要反向比较相应的元素。当一个矩阵的行或列是另一个矩阵相应行或列的反向版本时,该矩阵就被认为是另一个矩阵的镜像图

矩阵镜像图示例

示例 1

输入

输出

 
Yes   

解释

  • 对于 i = 0(第一行):mat1[0][0] = 1, mat2[0][2] = 1
  • 对于 i = 1(第二行):mat1[1][1] = 4, mat2[1][1] = 4
  • 对于 i = 2(第三行):mat1[2][2] = 8, mat2[2][0] = 8

所有对应的元素都满足镜像图条件;因此输出为“是”。

示例 2

输入

输出

 
No   

解释

  • 对于 i = 0(第一行):mat1[0][0] = 1, mat2[0][2] = 1
  • 对于 i = 1(第二行):mat1[1][1] = 4, mat2[1][1] = 4
  • 对于 i = 2(第三行):mat1[2][2] = 2, mat2[2][0] = 2

但是,对于 i = 0(第一行):mat1[0][1] = 2, mat2[0][1] = 2 不匹配(mat1[0][1] = 2, mat2[0][1] = 1),不满足镜像图条件,因此输出为“否”。

示例 3

输入

输出

 
Yes   

解释

  • 对于 i = 0(第一行):mat1[0][0] = 1, mat2[0][2] = 1
  • 对于 i = 1(第二行):mat1[1][1] = 5, mat2[1][1] = 5
  • 对于 i = 2(第三行):mat1[2][2] = 9, mat2[2][0] = 9

所有对应的元素都满足镜像图条件;因此输出为“是”。

方法

该代码通过将 matrix1 的每一行与 matrix2 的相应行从右到左进行比较,来检查 matrix2 是否是 matrix1 的水平镜像图。

算法

步骤 1: 定义一个函数 checkMirror(matrix1, matrix2, size),用于比较大小为 size x size 的两个方阵 matrix1 和 matrix2。

步骤 2: 初始化 row 为 0,col 为 0,用于跟踪 matrix2 中的当前索引,并将 isMirrorImage 初始化为 true,作为矩阵是镜像图的初始假设。

步骤 3: 使用一个外部循环(i 遍历 matrix1 的行)

  • 在内部,使用一个内部循环(j 反向遍历 matrix1 的列)
    • 比较 matrix2[row][col] 和 matrix1[i][j]。
    • 如果它们不同,则将 isMirrorImage 设置为 false 并跳出内部循环。
    • 增加 col 以移动到 matrix2 中的下一个列。

步骤 4: 在完成每个行比较的内部循环后,将 col 重置为 0,并增加 row 以移动到 matrix2 中的下一行,以便与 matrix1 中的下一行进行比较。

步骤 5: 如果 isMirrorImage 保持为 true,则打印“是”,表示 matrix2 是 matrix1 的镜像图。否则,打印“否”,表示它们不是镜像图。

步骤 6: 定义 size 作为矩阵的大小(例如,3x3 矩阵为 3)。

  • 使用特定值定义 matrix1 和 matrix2。
  • 调用 checkMirror(matrix1, matrix2, size) 来执行比较。

实施

让我们在 Java 程序中实现上述算法。

文件名:MirrorImageCheck.java

输出

 
Yes   

时间复杂度:代码的时间复杂度为 O(n^2),其中 n 是矩阵的大小(假设矩阵为 n×n)。

辅助空间:代码的辅助空间为 O(1)