【每日一题】LeetCode 48. 旋转图像 TypeScript
2026/6/30 9:29:53 网站建设 项目流程

给定一个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

解法一:先转置,后反转(执行用时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]] } }

共勉

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询