1. 程式人生 > >演算法入門-旋轉正方形矩陣

演算法入門-旋轉正方形矩陣

/**
 * 旋轉正方形矩陣
 * 【題目】 給定一個整型正方形矩陣matrix,請把該矩陣調整成順時針旋轉90度的樣子。
 * 【要求】 額外空間複雜度為O(1)。
 * 1  2  3  4 
 * 5  6  7  8 
 * 9  10 11 12
 * 13 14 15 16 
 * 
 * 13 9  5 1 
 * 14 10 6 2 
 * 15 11 7 3 
 * 16 12 8 4 
 * @author Administrator
 *
 */
public class Code05_RotateMatrix {

	public static void rotateMatrix(int[][] matrix) {
		int tR = 0;
		int tC = 0;
		int dR = matrix.length -1 ;
		int dC = matrix[0].length - 1;
		while(tR <= dR && tC <= dC) {
			rotateEdge(matrix, tR++, tC++, dR--, dC--);
		}
	}
	
	public static void rotateEdge(int[][] m, int tR, int tC, int dR, int dC) {
		int times = dC - tC;
		int tmp = 0;
		for(int i = 0; i != times; i++) {
			tmp = m[tR][tC + i];
			m[tR][tC + i] = m[dR - i][tC];
			m[dR - i][tC] = m[dR][dC - i];
			m[dR][dC - i] = m[tR + i][dC];
			m[tR + i][dC] = tmp;
		}
	}
	
	public static void printMatrix(int[][] m) {
		for (int i = 0; i < m.length; i++) {
			for (int j = 0; j < m[0].length; j++) {
				System.out.print(m[i][j] + " ");
			}
		}
		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);
	}

}