牛客堂常見面試題精講(一)1

quentain發表於2015-09-21

順時針旋轉列印矩陣:

演算法程式碼:

package com.zhao.niuke;

public class Problem_02_RotateMatrix {
	public static void rotate(int[][] matrix) {
		int tR = 0;//矩陣左上角第一個元素的起始位置行標
		int tC = 0; //列標
		int dR = matrix.length - 1;//矩陣最後一個元素也就是右下角元素的行標
		int dC = matrix[0].length - 1;//列標
		while (tR < dR) {//符合旋轉的條件
			rotateEdge(matrix, tR++, tC++, dR--, dC--);//進行座標移動邊際!
		}
	}
	public static void rotateEdge(int[][] m, int tR, int tC, int dR, int dC) {
		int times = dC - tC; // times就是總共的旋轉組數
		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[][] matrix) {
		//列印矩陣 i和j分別代表矩陣的行和列
		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("");
		}
	}
	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);//先列印初始矩陣
		rotate(matrix);//旋轉列印矩陣
		System.out.println("===========");
		printMatrix(matrix);
	}
}
/*
 * 如何實現轉圈列印矩陣
 */
詳細解析:



相關文章