1. 题目解析与核心思路
LeetCode 48题"旋转图像"是一个经典的二维数组操作问题。题目要求将一个n×n的矩阵顺时针旋转90度,并且必须在原地完成操作,即不使用额外的二维数组空间。这道题看似简单,但考察了程序员对矩阵操作和空间复杂度的理解能力。
1.1 题目要求详解
给定一个n×n的二维矩阵matrix,我们需要将其顺时针旋转90度。旋转后的矩阵应该满足:
- 原矩阵的第i行第j列元素 → 旋转后成为新矩阵的第j行第(n-i-1)列元素
示例输入:
code复制[
[1,2,3],
[4,5,6],
[7,8,9]
]
示例输出:
code复制[
[7,4,1],
[8,5,2],
[9,6,3]
]
1.2 关键限制条件
题目有两个重要限制:
- 必须原地旋转,不能使用额外的二维数组空间(只能使用O(1)的额外空间)
- 矩阵的边长n范围是1到20
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解法一:使用辅助矩阵(理解旋转规律)
2.1 基本思路
最直观的解法是创建一个新的n×n矩阵res,然后按照旋转规律将原矩阵的元素复制到新矩阵中。具体来说:
code复制res[j][n - i - 1] = matrix[i][j]
即原矩阵的(i,j)元素会移动到新矩阵的(j, n-i-1)位置。
2.2 Java实现代码
java复制class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int[][] res = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
res[j][n - i - 1] = matrix[i][j];
}
}
// 把结果复制回原矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
