Java 中的矩阵垂直翻转问题

17 Mar 2025 | 4 分钟阅读

垂直翻转矩阵 的问题陈述涉及取一个二维矩阵并颠倒其行的顺序,基本上是垂直翻转它。在数学上,如果原始矩阵表示为 M,垂直翻转的矩阵表示为 M',则变换可以表示如下:

  • Mrows-1-i,j 是原始矩阵中第 (rows - 1 - i) 行、第 j 列的元素。
  • Mi,j′ 是翻转矩阵中第 i 行、第 j 列的元素。

简单来说,可以通过颠倒矩阵行的顺序来执行矩阵的垂直翻转。此操作在各种图像处理和计算机图形学应用中非常有用,也用于某些算法和数据处理任务。

Vertical Flip Matrix Problem in Java

方法 1:使用临时矩阵

一种垂直翻转矩阵的方法是创建一个新矩阵,然后以相反的顺序复制行。让我们在 Java 程序中实现这种方法。

MatrixVerticalFlip.java

输出

Original Matrix:
1 2 3 
4 5 6 
7 8 9 
Vertically Flipped Matrix:
7 8 9 
4 5 6 
1 2 3

解释

给定一个输入矩阵,循环遍历原始矩阵,将元素以相反的顺序复制到新矩阵(flippedMatrix)中。一个有用的打印矩阵元素函数是 printMatrix() 方法。在提供示例矩阵的主函数中调用 verticalFlip() 方法以检索翻转后的矩阵。接下来,打印翻转后的矩阵和原始矩阵。

时间复杂度

创建新矩阵和复制元素的时间复杂度为 O(rows * cols),其中“rows”表示行数,“cols”表示列数。需要遍历原始矩阵 O(rows * Cols) 次。整个时间复杂度为 O(rows * Cols)。

空间复杂度

用于存储翻转后元素的附加矩阵决定了空间复杂度。由于分配了一个相同大小的新矩阵,因此空间复杂度为 O(rows * cols)。

方法 2:使用原地垂直翻转

此技术无需单独的矩阵即可原地垂直翻转。

InPlaceVerticalFlip.java

输出

Original Matrix:
11 22 33 
44 55 66 
77 88 99 

In-Place Vertically Flipped Matrix:
77 88 99 
44 55 66 
11 22 33

解释

通过沿垂直轴交换元素,inPlaceVerticalFlip() 函数会在原地执行垂直翻转,给定一个输入矩阵。再次使用 printMatrix() 技术打印矩阵的元素。inPlaceVerticalFlip() 方法在主方法中被调用,该方法也提供了一个示例矩阵。接下来,打印翻转后的矩阵和原始矩阵。

时间复杂度

O(rows/2 * cols) 是遍历一半行所需的时间。整个时间复杂度为 O(rows * Cols)。

空间复杂度

除了少数变量外,原地技术不使用与矩阵大小成比例的额外空间。O(1) 空间复杂度表示常数空间。