本文主要是介绍LeetCode刷题之HOT100之旋转图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2024/6/4 昨晚在实验室待到很晚才回去,回去看会《万历十五年》就睡了,现在又来了,看了一下昨天做的题目的题解过程,稍微理解了深度优先搜索和回溯思想,那么现在,继续今天的刷题。
1、题目描述
2、逻辑分析
从数组来到了矩阵,焕然一新的感觉。 看到矩阵旋转,就可以找到规律。
[[1,2,3],[4,5,6],[7,8,9]] 变成 [[7,4,1],[8,5,2],[9,6,3]]规律是显而易见滴。
在这里就可以用一句概括:对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个 位置。
那么怎么解决该题呢?用代码来表示就是在 m a t r i x [ r o w ] [ c o l ] matrix[row][col] matrix[row][col] 的元素在旋转后变成 m a t r i x n e w [ c o l ] [ n − r o w − 1 ] matrix_{new}[col][n-row-1] matrixnew[col][n−row−1],以此为条件来用代码实现
3、代码演示
public void rotate(int[][] matrix) {// 获取矩阵的行数(也是列数,因为矩阵是方阵)int n = matrix.length;// 创建一个新的二维数组来存储旋转后的结果int [][] newMatrix = new int[n][n];// 遍历原矩阵的每一个元素for(int i = 0; i < n; i++){for(int j = 0; j < n ; j++){// 将原矩阵的元素旋转90度后放到新矩阵的对应位置 // 注意这里j是行索引,n - i - 1是列索引,因为矩阵旋转后,行变成列,列变成行,并且行和列的索引都需要反向 newMatrix[j][n - i - 1] = matrix[i][j];}}// 将新矩阵的值复制回原矩阵,实现原地旋转的效果(但实际上是使用了额外空间的)for(int i = 0; i < n; i++ ){for(int j = 0; j < n; j++){matrix[i][j] = newMatrix[i][j];}}}
理解了规律。实现起来就简单多了,这题还是挺简单的,时间复杂度: O ( N 2 ) O(N^2) O(N2),空间复杂度: O ( N 2 ) O(N^2) O(N2)。
欧克,这题先这样,我得做被安排的任务去啦,拜拜!
这篇关于LeetCode刷题之HOT100之旋转图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!