**1.6 Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rtate the image by 90 degrees. Can you do this in place?**

## In place 90 degree rotation

```
def one_dot_six_1(matrix):
n = len(matrix)
rows, cols = n, n
mid = n // 2
for row in range(mid):
for col in range(row, cols - row - 1):
# 3 x 3 example
ax, ay = row, col # 0 0
bx, by = ay, cols - ax - 1 # 0 2
cx, cy = by, cols - bx - 1 # 2 2
dx, dy = cy, cols - cx - 1 # 2 0
# save values
a = matrix[ax][ay]
b = matrix[bx][by]
c = matrix[cx][cy]
d = matrix[dx][dy]
# rotate them
matrix[bx][by] = a
matrix[cx][cy] = b
matrix[dx][dy] = c
matrix[ax][ay] = d
return matrix
```

Here’s a few insights and gotchas I ran into writing this solution:

- Don’t rotate the last column when you’re running through the first row because it’s already been updated
- Think about the destintination coordinates in respect to the source coordinates. You can apply this relationship to every “face” of the matrix
- Start small. Test with a 3 x 3 matrix. Start by moving a single element without loops. Then try moving an entire row.