一【题目类别】
- 数组
二【题目难度】
- 中等
三【题目编号】
- 48.旋转图像
四【题目描述】
- 给定一个 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]]
六【题目提示】
- n == matrix.length == matrix[i].length
- 1 <= n <= 20
- -1000 <= matrix[i][j] <= 1000
七【解题思路】
- 这种题目多写几个例子多看看题目给的例子就能找到规律,其实说白了就是第一步先转置矩阵,然后再左右翻转就得到了结果矩阵,而且是在原矩阵上修改的,符合题目条件
八【时间频度】
- 时间复杂度: O ( n 2 ) O(n^2) O(n2),其中 n n n为数组长度
- 空间复杂度: O ( 1 ) O(1) O(1)
九【代码实现】
- Java语言版
package Array;
public class p48_RotateTheImage {
public static void main(String[] args) {
int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
rotate(matrix);
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
if (j == (matrix.length - 1)) {
System.out.print(matrix[i][j] + "\n");
} else {
System.out.print(matrix[i][j] + " ");
}
}
}
}
public static void rotate(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < i; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
int left = 0, right = matrix.length - 1;
while (left < right) {
for (int i = 0; i < matrix.length; i++) {
int temp = matrix[i][left];
matrix[i][left] = matrix[i][right];
matrix[i][right] = temp;
}
left++;
right--;
}
}
}
- C语言版
#include<stdio.h>
void rotate(int** matrix, int matrixSize, int* matrixColSize)
{
for (int i = 0; i < matrixSize; i++)
{
for (int j = 0; j < i; j++)
{
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
int left = 0, right = matrixSize - 1;
while (left < right)
{
for (int i = 0; i < matrixSize; i++)
{
int temp = matrix[i][left];
matrix[i][left] = matrix[i][right];
matrix[i][right] = temp;
}
left++;
right--;
}
}
/*主函数省略*/
十【提交结果】
-
Java语言版
-
C语言版