# LeetCode – Rotate Image (Java)

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Could you do this in-place?

Naive Solution

In the following solution, a new 2-dimension array is created to store the rotated matrix, and the result is assigned to the matrix at the end. This is WRONG! Why?

```public class Solution { public void rotate(int[][] matrix) { if(matrix == null || matrix.length==0) return ;   int m = matrix.length;   int[][] result = new int[m][m];   for(int i=0; i<m; i++){ for(int j=0; j<m; j++){ result[j][m-1-i] = matrix[i][j]; } }   matrix = result; } }```

The problem is that Java is pass by value not by refrence! "matrix" is just a reference to a 2-dimension array. If "matrix" is assigned to a new 2-dimension array in the method, the original array does not change. Therefore, there should be another loop to assign each element to the array referenced by "matrix". Check out "Java pass by value."

```public class Solution { public void rotate(int[][] matrix) { if(matrix == null || matrix.length==0) return ;   int m = matrix.length;   int[][] result = new int[m][m];   for(int i=0; i<m; i++){ for(int j=0; j<m; j++){ result[j][m-1-i] = matrix[i][j]; } }   for(int i=0; i<m; i++){ for(int j=0; j<m; j++){ matrix[i][j] = result[i][j]; } } } }```

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; } } }```
Category >> Algorithms
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```
• hina jain

I think the j should be initialized to i instead of 0 in the second for loop.

• svGuy

transpose the matrix and swap rows

• svGuy

its easier to transpose the matrix first and then swap columns for clockwise rotation.

• Ivy G

You can replace “Math.ceil(((double) n) / 2.” with “(n+1)/2”

• Chen Chen

Great! Thanks for sharing.

• my boo

my bad, I got the axis messed up.

• my boo

Your algorithm counter rotate the image instead of clock wise rotate.

• Guest

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

• A Programmer

how would you do it counter clockwise?

• kinshuk chandra

I liked the inplace solution. I have also done the same thing here – http://k2code.blogspot.in/2014/03/rotate-n-n-matrix-by-90-degrees.html