矩阵的转置变换、翻转行/列、旋转

Share my LeetCode answer


矩阵的转置变换、翻转行/列、旋转

这篇文章记录了在java中如何实现一些矩阵的基本操作的方法,如行/列变换以及翻转等等。矩阵的变换在一定程度上可以理解为对于每个元素的规律性变换,这些操作在对图片处理时有着至关重要的作用。

行/列操作:

这一类操作牵扯到将矩阵的行或者列逆序,一般方法在遍历矩阵元素时固定其中一个维度,另一维交换到关于中心对称位置。实现matrix[i][j]<–>matrix[len-1-i][j]的交换。代码如下:

public void reverse(int[][] matrix) {
	int len = matrix.length;
	//方阵,交换行
	for (int i = 0; i < len / 2; i++) {
		for (int j = 0; j < len; j++) {
			int temp = matrix[i][j];
			matrix[i][j] = matrix[len-1-i][j];
			matrix[len-1-i][j] = temp;
		}
	}
}

转置变换(Transpose):

矩阵的转置变化是比较常见的一种变换,在信号处理和图像中有着非常广泛的运用。在实现时只要对于矩阵的上三角阵或者下三角阵之一进行遍历即可,代码如下:

public void transpose(int[][] matrix) {
	int len = matrix.length;
	//方阵,转置
	for (int i = 0; i < len; i++) {
		for (int j = i; j < len; j+) {  //j从i开始,上三角
			int temp = matrix[i][j];
			matrix[i][j] = matrix[j][i];
			matrix[j][i] = temp;	
		}
	}
}

矩阵旋转:

矩阵旋转对应实际应用有图片的旋转九十度,分别有顺时针和逆时针两种旋转方式。顺时针旋转可以拆分为对于行的逆序变换再加一个转置变换;逆时针变换可以拆分为对于列的逆序变换再加上一个转置变换。顺时针代旋转代码如下:

public void rotate(int[][] matrix) {
	reverse(matrix);
	transpose(matrix)l;
}

矩阵的旋转可见48. Rotate Image