Tuesday, April 26, 2016

[LeetCode] 48. Rotate Image

You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?


public class Solution {
    
    private void swap(int[][] matrix, int i, int j, int x, int y){
        
        // Error: A very silly mistake i != j || x != y
        if(i != x || j != y){
            // Error: Again, we have to judge identity if using bitwise method.
            matrix[i][j] = matrix[i][j] ^ matrix[x][y];
            matrix[x][y] = matrix[i][j] ^ matrix[x][y];
            matrix[i][j] = matrix[i][j] ^ matrix[x][y];
        }
    }
    
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        
        if(0 == n)
            return;
            
        for(int i = 0; i < (n+1)/2; ++i)
        // Error: Notice for n is odd, the rotation is not a square. 
        for(int j = 0; j < n/2; ++j){
            int si = j;
            int sj = n -1 -i;
            swap(matrix, i, j, si, sj);
            si = n - 1 - i;
            sj = n - 1 - j;
            swap(matrix, i, j, si, sj);
            si = n - 1 - j;
            sj = i;
            swap(matrix, i, j, si, sj);
        }
        return;
    }
}

No comments:

Post a Comment