LeetCode – Rotate Image (Java)

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?

In-place Solution

By using the relation “matrix[i][j] = matrix[n-1-j][i]”, we can loop through the matrix.

public void rotate(int[][] matrix) {
	int n = matrix.length;
	for (int i = 0; i < n / 2; i++) {
		for (int j = 0; j < Math.ceil(((double) n) / 2.); j++) {
			int temp = matrix[i][j];
			matrix[i][j] = matrix[n-1-j][i];
			matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
			matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
			matrix[j][n-1-i] = temp;
		}
	}
}

14 thoughts on “LeetCode – Rotate Image (Java)”

  1. I think `int j = 0` can be optimized to `int j = i`.

    Explanation:
    The algorithm iterates over the layers of the matrix – the `i` loop` – has `n/2` layers.
    The `j` loop iterates over the elements remained in the `i`-th layer.
    But, for example, element 1,0, was already handled in the `i=0` layer. No need to handle it again.

  2. The recursive version… just for fun 🙂

    public void rotate(int[][] a) {
    if (a == null || a.length <= 1)
    return;

    rotate(a, 0, a.length-1);
    }

    private void rotate(int[][] a, int start, int limit) {
    if (limit <= 0)
    return;

    for (int j = start; j < start+limit; j++) {
    int t = a[start][j];
    int jOff = j-start;
    a[start][j] = a[start+limit-jOff][start];
    a[start+limit-jOff][start] = a[start+limit][start+limit-jOff];
    a[start+limit][start+limit-jOff] = a[j][start+limit];
    a[j][start+limit] = t;
    }

    rotate (a, start+1, limit-2);
    }

  3. int length = matrix.length-1;
    System.out.println("len "+matrix.length);
    for (int i = 0; i <= (length)/2; i++) {
    for (int j = i; j < length-i; j++) {

    int temp = matrix[i][j];

    matrix[i][j] = matrix[length-j][i];
    matrix[length-j][i] = matrix[length-i][length-j];
    matrix[length-i][length-j] = matrix[j][length-i];
    matrix[j][length-i] = temp;
    }
    }

  4. If I is your matrix

    for i in range(n):
    j=0
    while(j<i):
    temp=a[i][j]
    a[i][j]=a[j][i]
    a[j][i]=temp
    j+=1

    print a

Leave a Comment