力扣初级算法(旋转矩阵)
- 每日一算法:旋转矩阵
学习内容:
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;}}}
}
执行结果:
学习时间:
因为最近工作繁忙,晚上回家竟然懈怠了,惭愧惭愧,大家一起加油学习力扣算法把!