本文主要是介绍力扣经典150题第三十六题:旋转图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 力扣经典150题第三十六题:旋转图像
- 引言
- 题目详解
- 解题思路
- 代码实现
- 示例演示
- 复杂度分析
- 总结
- 扩展阅读
力扣经典150题第三十六题:旋转图像
引言
本篇博客介绍了力扣经典150题中的第三十六题:旋转图像。题目要求将给定的 n × n 二维矩阵顺时针旋转90度,并要求在原地进行修改。
题目详解
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
示例 2:
输入: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]]
解题思路
要将矩阵顺时针旋转90度,可以分为两个步骤:
- 先进行矩阵的转置操作,即将矩阵的行列互换。
- 然后对转置后的矩阵进行每行元素的反转。
通过这两个步骤可以实现顺时针旋转90度的效果。
代码实现
public class RotateImage {public void rotate(int[][] matrix) {int n = matrix.length;// Step 1: Transpose the matrixfor (int i = 0; i < n; i++) {for (int j = i; j < n; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}// Step 2: Reverse each rowfor (int i = 0; i < n; i++) {for (int j = 0; j < n / 2; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[i][n - 1 - j];matrix[i][n - 1 - j] = temp;}}}public static void main(String[] args) {RotateImage solution = new RotateImage();// 示例测试int[][] matrix1 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};System.out.println("输入矩阵1:");printMatrix(matrix1);solution.rotate(matrix1);System.out.println("顺时针旋转90度后的矩阵1:");printMatrix(matrix1);int[][] matrix2 = {{5, 1, 9, 11}, {2, 4, 8, 10}, {13, 3, 6, 7}, {15, 14, 12, 16}};System.out.println("输入矩阵2:");printMatrix(matrix2);solution.rotate(matrix2);System.out.println("顺时针旋转90度后的矩阵2:");printMatrix(matrix2);}private static void printMatrix(int[][] matrix) {for (int[] row : matrix) {System.out.println(Arrays.toString(row));}System.out.println();}
}
示例演示
展示了两个不同规模的矩阵输入,并输出了顺时针旋转90度后的结果。
复杂度分析
该解法的时间复杂度为 O(n^2),其中 n 是矩阵的大小(行数或列数)。空间复杂度为 O(1),除了存储结果的列表外,没有使用额外的空间。
总结
本篇博客介绍了如何实现顺时针旋转90度的矩阵操作,并给出了具体的解题思路和代码实现。希望对你有所帮
助!
扩展阅读
- 力扣官方题解 - 旋转图像
这篇关于力扣经典150题第三十六题:旋转图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!