190424打卡:将正方形矩阵顺时针旋转90°

题目描述:
给定一个N×N的矩阵matrix 把这个矩阵调整成顺时针转动90°后的形式,例如
在这里插入图片描述
要求:额外空间复杂度O(1)

思路:以上述图为例,将13赋值给1位置,将16赋值给13位置,将4赋值给16位置,再将1赋值给4位置,就是上图中用黑色圈标记的位置,然后重复上述过程将红色圈位置交换,在将粉色位置交换,这样就完成了最外层的调换,里层重复外层的交换,注意只能正方形才能旋转,如果矩阵为矩形,旋转以后会超出矩阵的容纳范围

public class RotatMatrix {
	public static void rotateMatrix(int[][] matrix) {
		int aH = 0;
		int aL = 0;
		int bH = matrix.length - 1;
		int bL = matrix[0].length - 1;
		
		while(aH < bH) {
			rotateEdge(matrix, aH++, aL++, bH--, bL--);
		}
	}
	
	public static void rotateEdge(int[][] matrix, int aH, int aL, int bH, int bL){
		int times = bL - aL; //每一层的循环组数
		int temp = 0;
		for(int i = 0; i != times; i++) {
			temp = matrix[aH][aL + i];
			matrix[aH][aL + i] = matrix[bH - i][aL];
			matrix[bH - i][aL] = matrix[bH][bL - i];
			matrix[bH][bL - i] = matrix[aH + i][bL];
			matrix[aH + i][bL] = temp;
		}
	}
	
	public static void printMatrix(int[][] matrix) {
		for(int i = 0; i < matrix.length; i++) {
			for(int j = 0; j < matrix[0].length; j++) {
				System.out.print(matrix[i][j] + "  ");
			}
			
			System.out.println();
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
		printMatrix(matrix);
		rotateMatrix(matrix);
		printMatrix(matrix);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42447402/article/details/89490551