AI写专著的实用指南:借助AI工具,高效完成20万字专著!
2026/6/30 10:38:21
给定一个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].length1 <= n <= 20-1000 <= matrix[i][j] <= 1000解法一:先转置,后反转(执行用时1ms)
/** Do not return anything, modify matrix in-place instead. */ function rotate(matrix: number[][]): void { const n = matrix.length for(let i=0;i<n;i++){ for(let j=i+1;j<n;j++){ [matrix[i][j] ,matrix[j][i]] = [matrix[j][i],matrix[i][j]] } } for(let i=0;i<n;i++){ matrix[i].reverse() } };或手写反转函数reverse()
/** Do not return anything, modify matrix in-place instead. */ function rotate(matrix: number[][]): void { const n = matrix.length for(let i=0;i<n;i++){ for(let j=i+1;j<n;j++){ [matrix[i][j] ,matrix[j][i]] = [matrix[j][i],matrix[i][j]] } } for(let i=0;i<n;i++){ let left = 0 , right = n-1 while(left<right){ [matrix[i][left],matrix[i][right]] = [matrix[i][right],matrix[i][left]] left++ right-- } } };解法二:先翻转,再转置(执行时长0ms)
/** Do not return anything, modify matrix in-place instead. */ function rotate(matrix: number[][]): void { const n = matrix.length let top=0 , bottom = n-1 while(top<bottom){ [matrix[top],matrix[bottom]] = [matrix[bottom],matrix[top]] top++ bottom-- } for(let i=0;i<n;i++){ for(let j=0;j<i;j++){ [matrix[i][j],matrix[j][i]] = [matrix[j][i],matrix[i][j]] } } };//这段代码(对角线右上角) for(let i=0;i<n;i++){ for(let j=i+1;j<n;j++){ [matrix[i][j],matrix[j][i]] = [matrix[j][i],matrix[i][j]] } } 等价于(对角线左下脚) for(let i=0;i<n;i++){ for(let j=0;j<i;j++){ [matrix[i][j],matrix[j][i]] = [matrix[j][i],matrix[i][j]] } }共勉