给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotate-matrix-lcci/ 著作权归领扣网络所有。
给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ],
原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]
给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ],
原地旋转输入矩阵,使其变为: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ]
看到题目之后,你最先想到的可能是使用一个辅助数组去配合原来的二维数组进行操作。可是题目中有“不占用额外内存空间能否做到”的字样, 所以希望不使用辅助数组去实现。
旋转的90度的题目,都可以使用下面的办法。对折数组,然后以对角线再进行对折。其中的对折是横向还是竖向就因题而异了。
如果有什么错误或者问题,欢迎评论,我们一起探讨,一起进步。
public void rotate(int[][] matrix) {
int n = matrix.length;
//水平翻转
for (int i = 0; i < n / 2; i++) {
for (int j = 0; j < n; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[n - i - 1][j];
matrix[n - i - 1][j] = temp;
}
}
//对角线翻转
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}