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:
This is a classic problem in Craking Coding interview, 1.6
The key idea is to rotate the matrix according to layers. For the nth layer(the out layer), rotate 90 degree is to move all the elements n times in a circle. In each layer, the rotation can be performed by first swap 4 corners, then swap 4 elements next to corner until the end of each line.
While there is another soulution could calculate index easily.
1. lap over along with x-axis2
2. lap over along with diagonal line
Java
public void rotate(int[][] matrix) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int length = matrix.length;
// swap the diagnoal
for(int i=0; i<length/2; i++){
for(int j=0; j<length; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[length-i-1][j];
matrix[length-i-1][j] = temp;
}
}
for(int i=0; i<length; i++){
for(int j=0; j<i+1;j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}c++
void rotate(vector<vector<int> > &matrix) {
int length = matrix.size();
for(int i=0;i<length/2;i++){
for(int j=0;j<length;j++){
swap(matrix[i][j],matrix[length-1-i][j]);
}
}
for(int i=0;i<length;i++){
for(int j=0;j<i+1;j++){
swap(matrix[i][j],matrix[j][i]);
}
}
}

本文介绍了一个经典的编程面试题目——二维矩阵顺时针旋转90度的解决方案。文章提供了两种主要思路:一是按层旋转,通过交换四个角和角边元素实现;二是先沿水平轴翻转,再沿对角线翻转。并给出了Java和C++两种语言的代码实现。
2161

被折叠的 条评论
为什么被折叠?



