48旋转矩阵
力扣48题,也是和面试题 01.07. 旋转矩阵同一题:
题目:将一个矩阵旋转90度。
[
[ 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度变成最下面的矩阵。
首先,将原来的矩阵,上下交换位置,然后就是右上角那样。这个时候我们发现
对角线那4个和答案的是一样的。而其他的只需要将其他几个数对着对角线换一下位置。就是最终结果了。也就是旋转90度的答案
代码实现:
package 数据结构.数组;
//------------------------------------注意!!!arr.length是数组中行的长度
public class 旋转矩阵 {
public static void main(String[] args) {
int[][] arr = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
// int[][] arr = new int[4][4];
// int a=1;
// for (int i = 0; i <4 ; i++) {
// for (int j = 0; j < 4; j++) {
// arr[i][j] = a++;
// }
// }
Solution5 s = new Solution5();
s.rotate(arr);
for (int i = 0; i <4 ; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
//这部分是答案
class Solution5{
public void rotate(int[][] matrix){
int n = matrix.length;
//前后翻转
//看不懂的可能是以为4*4的话数组长度n为16
// 实际上二维数组.length是数组的行的长度所以如果是4*4那其实长度为4
int t =0;
for (int i = 0; i <n/2 ; i++) {
for (int j = 0; j <n ; j++) {
t = matrix[i][j];
matrix[i][j] = matrix[n-i-1][j];
matrix[n-i-1][j] = t;
}
}
//对角线翻转
for (int i = 0; i <n ; i++) {
for (int j = 0; j < i; j++) {
t = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = t;
}
}
}
}