RotateMatrix-N*N矩陣原數組上順時針旋轉90度

/**
 * 將n*n的二維數組,順時針旋轉90度都,二維數組的內容
 */
public class RotateMatrix {

    /**
     * 上右下左,四個爲一組,循環替換
     * 時間複雜度n*n,只能在原數組的基礎上旋轉
     * @param arr
     */
    public void rotate(int[][] arr) {
        int maxIndex = arr.length - 1;
        int n = arr.length % 2 == 0 ?  arr.length / 2 - 1 :  arr.length / 2;
        int i = 0;
        int j = 0;

        while (i <= n) {
            while (j < maxIndex - i) {
                int temp = arr[i][j];
                arr[i][j] = arr[maxIndex - j][i];
                arr[maxIndex - j][i] = arr[maxIndex - i][maxIndex - j];
                arr[maxIndex - i][maxIndex - j] = arr[j][maxIndex - i];
                arr[j][maxIndex - i] = temp;
                j++;
                continue;
            }
            i++;
            j = i;
        }
    }

    public static void main(String[] args) {
        int n = 10;
        int num = 1;
        int[][] arr = new int[n][n];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = num++;
            }
        }

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(String.format("%4d", arr[i][j]));
            }
            System.out.println();
        }

        System.out.println();
        RotateMatrix rotateMatrix = new RotateMatrix();
        rotateMatrix.rotate(arr);
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(String.format("%4d", arr[i][j]));
            }
            System.out.println();
        }

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章