48. Rotate Image

class Solution {
    public void rotate(int[][] matrix) {
        // set n = matrix.length;
        // after rotate
        // matrix[i][j]=>matrix[j][n-i-1]
        
        // layer count from 0 to lastLayer-1;
        int lastLayer = matrix.length/2;
        
        // index from matrix[layer][layer] to matrix[layer][n-1-layer];
        for(int i =0; i< lastLayer; i++){
            // from[i, matrix.length-1-i)
            for(int j = i; j<matrix.length-1-i; j++){
                swap(matrix, i, j);
            }
        }
        
    }
    
    private void swap(int[][] matrix, int i, int j){
        //matrix[i][j]=>matrix[j][n-i-1];
        //[i][j] [0][0] 1
        //[j][n-i-1]; [0][1]; 2
        //[n-i-1][n-j-1] [1][1] 4
        //[n-j-1][i]; [1][0] 3
        int n = matrix.length;
        int memo = matrix[i][j]; 
        matrix[i][j]= matrix[n-j-1][i];
        matrix[n-j-1][i] = matrix[n-i-1][n-j-1];
        matrix[n-i-1][n-j-1] = matrix[j][n-i-1];
        matrix[j][n-i-1] = memo;
    }
}

Last updated