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?
We can do this in place by rotate four elements each time. For example, if the matrix is 2*2, the transformation will be
| 00 | 01 | => | 10 | 00 | |
| 10 | 11 | => | 11 | 01 |
| 00 | 01 | 02 | 20 | 01 | 00 | 20 | 10 | 00 | ||||
| 10 | 11 | 12 | => | 10 | 11 | 12 | => | 10 | 11 | 01 | ||
| 20 | 21 | 22 | 20 | 21 | 02 | 22 | 12 | 02 |
C++ Code:
/*
* func: rotate_image
* goal: rotate the n*n image 90 degree clockwise
* @param matrix: image matrix
* return:
*/
void rotate(vector<vector<int> > &matrix){
size_t n = matrix.size();
for(size_t i=0; i < n/2; ++i){
for(size_t j=0; j<n-1-i; ++j){
auto tmp = 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] = tmp;
}
}
}
Python Code:
# func: rotate a image by 90 degree clockwise
# @param matrix: input image matrix
# @return: rotated image
def rotate_image(matrix):
size = len(matrix)
for i in xrange(size/2):
for j in xrange(i, size-1-i):
tmp = matrix[i][j]
matrix[i][j] = matrix[size-1-j][i]
matrix[size-1-j][i] = matrix[size-1-i][size-1-j]
matrix[size-1-i][size-1-j] = matrix[j][size-1-i]
matrix[j][size-1-i] = tmp
return matrix
No comments:
Post a Comment