来源Leetcode第48题旋转图像
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像
示例 1:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
两次翻转
这题没什么思路,规律没找到。
看了题解之后知道可以通过上下翻转一次,在通过对角线翻转一次即可完成。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public void rotate(int[][] matrix) { int n = matrix.length; for (int i = 0; i < n / 2; i ++){ int[] tmp = matrix[i]; matrix[i] = matrix[n - i - 1]; matrix[n - i - 1] = tmp; }
for (int i = 0; i < n; i ++){ for (int j= i + 1; j < n; j++){ int tmp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = tmp; } } } }
|
四数交换
当然这题规律找出来了就是简单的四数交换,感谢木苡微澜的题解
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
int length = matrix.length; int lengthend = matrix.length;
for (int r = 0; r <= (length - 1) / 2; r++) {
int[] temp = new int[length-2*r-1];
for (int i = 0; i < temp.length; i++) { temp[i] = matrix[r][i + r]; }
for (int i = 1 + r; i < lengthend; i++) { matrix[r][length - 1 - i] = matrix[i][r]; }
for (int i = 1 + r; i < lengthend; i++) { matrix[i][r] = matrix[length - 1 - r][i]; }
for (int i = 1 + r; i < lengthend; i++) { matrix[length - 1 - r][i] = matrix[length - 1 - i][length - 1 - r]; }
for (int i = 1; i <= temp.length; i++) { matrix[length - i - 1 - r][length - 1 - r] = temp[temp.length - i]; } lengthend -= 1; }
public void rotate(int[][] matrix) { int len = matrix.length >> 1; for(int j = 0; j < len; j++) { int lengthend = matrix.length - 1 - 2 * j; for (int i = 0; i < lengthend; i++) { int temp = matrix[j][i + j]; matrix[j][i + j] = matrix[matrix.length - 1 - j - i][j]; matrix[matrix.length - 1 - j - i][j] = matrix[matrix.length - 1 - j][matrix.length - 1 - j - i]; matrix[matrix.length - 1 - j][matrix.length - 1 - j - i] = matrix[j + i][matrix.length - 1 - j]; matrix[j + i][matrix.length - 1 - j] = temp; } } }
|