48. Rotate Image
Imformation
- Total Accepted: 75511
- Total Submissions: 212021
- Difficulty: Medium
Question
- 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?
My answer
for i in range(0, n/2): for j in range(i, n-1-i): mat[i][j], mat[j][n-1-i], mat[n-1-i][n-1-j], mat[n-1-j][i] = mat[n-1-j][i], mat[i][j], mat[j][n-1-i], mat[n-1-i][n-1-j]
My code only beat 50% PythonSubmissions.
Full code
#!/usr/bin/env python count = 1 mat = [] n=4 for i in range(0, n): tmp = [] for j in range(0, n): tmp.append(count) count += 1 mat.append(tmp) for i in range(0, n): print mat[i] #strat exchang for i in range(0, n/2): for j in range(i, n-1-i): mat[i][j], mat[j][n-1-i], mat[n-1-i][n-1-j], mat[n-1-j][i] = mat[n-1-j][i], mat[i][j], mat[j][n-1-i], mat[n-1-i][n-1-j] for i in range(0, n): print mat[i]
Extension
Rotate the image by 180 degrees
for i in range(0, n/2): for j in range(i, n-1-i): mat[i][j], mat[j][n-1-i], mat[n-1-i][n-1-j], mat[n-1-j][i] = mat[n-1-i][n-1-j], mat[n-1-j][i], mat[i][j], mat[j][n-1-i]
Rotate the image by 270 degrees
for i in range(0, n/2): for j in range(i, n-1-i): mat[i][j], mat[j][n-1-i], mat[n-1-i][n-1-j], mat[n-1-j][i] = mat[j][n-1-i], mat[n-1-i][n-1-j], mat[n-1-j][i], mat[i][j]