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?
Analysis:Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
This is a problem from CrackCode150 book, it's problem 1.6.
Basically, we modified the values layer by layer from outside to inside. The outer loop is to traverse from outer layer to inner layer, the inner loop is to traverse the pixel entries in each layer.
Code:
class Solution {
public:
// 4-way swaps from outer to inner
void rotate(vector<vector<int> > &matrix) {
int n=matrix.size();
if (n==0) return;
// i - layers
for (int i=0; i<n/2; i++) {
int st=i, ed=n-i-1;
// traverse each edge
for (int j=st; j<ed; j++) {
int tmp=matrix[st][j];
// left to top
matrix[st][j]=matrix[st+ed-j][st];
// bottom to left
matrix[st+ed-j][st]=matrix[ed][st+ed-j];
// right to bottom
matrix[ed][st+ed-j]=matrix[j][ed];
// top to right
matrix[j][ed]=tmp;
}
}
}
};
No comments:
Post a Comment