力扣初级算法(旋转矩阵)
- 每日一算法:旋转矩阵
学习内容:
1.问题:
给你一幅由 N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
2.示例:
示例一:
给定 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]
]
3.旋转矩阵的解法:
3.1自我总结(借鉴力扣大佬的思路):
如果是顺时针旋转90°
一定是先对角线翻转
,再水平翻转
如果是逆时针旋转90°
一定是先水平翻转
,再对角线翻转
为了方便大家理解,我给大家画了张图:
3.2 代码实现
class Solution {
public void rotate(int[][] matrix) {
int length = matrix.length;
//先对角线翻转
for(int i = 0;i<length;i++){
for(int j = i+1;j<length;j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
//再水平翻转
for (int i= 0; i<length;i++){
for (int j =0;j<length;j++){
if (j<length-j-1) {
int temp = matrix[i][j];
matrix[i][j] = matrix[i][length - j - 1];
matrix[i][length - j - 1] = temp;
}
}
}
}
}
这段代码执行完:
方法二:这里借鉴的大佬的另外一个思路实现的:
class Solution {
public void rotate(int[][] matrix) {
int length = matrix.length;
//先上下翻转
for(int i = 0;i<length/2;i++){
int[] a = new int[length -1];
a = matrix[i];
matrix[i] = matrix[length - i -1];
matrix[length - i -1] = a;
}
//再对角线翻转
for(int i = 0;i<length;i++){
for(int j = i+1;j<length;j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
}
执行结果:
学习时间:
因为最近工作繁忙,晚上回家竟然懈怠了,惭愧惭愧,大家一起加油学习力扣算法把!