旋转数组

 

/**
 * @Auther: liuhaidong
 * Data: 2020/4/7 0007、16:24
 * Description:
 * @version: 1.0
 */
public class Test24 {
    /*
     * 给定一个N*N的整形矩阵Matrix,把这个矩阵顺时针旋转90度,输入(打印)元素值。
     * 例如:
     *  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
     *
     * 要求:额外空间复杂度为O(1)
     * */
    public static void main(String[] args) {
//初始化一个 4*4的整形矩阵,从第一行第一列从左向右,第二行,第三行,直到第四行依次赋值 1,2,...16.
        int[][] matrixDemo=new int[4][4];
        matrixDemo=createMatrix();
        printMatrix(matrixDemo);

        System.out.println();
        //顺时针旋转90度打印
        rotate(matrixDemo);
        printMatrix(matrixDemo);
    }
    //顺时针旋转90度打印
    private static void rotate(int[][] matrix) {
        // TODO Auto-generated method stub
        int topRow=0;
        int topCol=0;
        int dowmRow = matrix.length-1;
        int dowmCol = matrix[0].length-1;
        while(topRow <= dowmRow) {
            rotateEdge(matrix, topRow++, topCol++, dowmRow--,dowmCol--);
        }
    }
    //顺时针旋转90度打印
    private static void rotateEdge(int[][] matrix, int topRow, int topCol, int dowmRow, int dowmCol) {
        // TODO Auto-generated method stub
        int times=dowmRow-topRow;
        // timies就是总的组数
        int temp=0;
        for(int i=0; i!=times;i++) {
            //一次循环就是一组调整
            temp=matrix[topRow][topCol+i];
            //赋值给临时变量 1  2
            matrix[topRow][topCol+i]=matrix[dowmRow-i][topCol];
            //7 --> 1  4 --> 2
            matrix[dowmRow-i][topCol]=matrix[dowmRow][dowmCol-i];
            //9 --> 7  8 --> 4 
            matrix[dowmRow][dowmCol-i]=matrix[topRow+i][dowmCol];
            //3 --> 9  6 --> 8
            matrix[topRow+i][dowmCol]=temp;
            //1 --> 3  2 --> 6
        }
    }

    //生成矩阵
    private static int[][] createMatrix() {
        // TODO Auto-generated method stub
        int matrix[][]=new int[4][4];
        int k=1;
        for(int i=0;i<4;i++) {
            for(int j=0;j<4;j++) {
                matrix[i][j]=k;
                k++;
            }
        }
        return matrix;
    }
    //顺序打印矩阵元素
    private static void printMatrix(int[][] matrix) {
        for(int i=0;i<4;i++) {
            for(int j=0;j<4;j++) {
                System.out.print(matrix[i][j]+"\t");
            }
            System.out.println();
        }
    }
}