旋转图像

川长思鸟来 2022-12-29 02:17 343阅读 0赞

leetcode 48题 [medium]
中:旋转图像
英:Rotate Image
在这里插入图片描述

题解1

1. 思路:从外层到里层一层一层旋转

在这里插入图片描述

2. 时间复杂度:O(n²)
3. 空间复杂度:O(1)
4. 实现
  1. /** * @param {number[][]} matrix * @return {void} Do not return anything, modify matrix in-place instead. */
  2. var rotate = function(matrix) {
  3. let matrixLen = matrix.length;
  4. for(let layer=0, maxLayer=Math.floor(matrixLen/2); layer<maxLayer; layer++){
  5. for(let column=layer; column<matrixLen-layer-1; column++){
  6. // 旋转 (ES6 解构语法)
  7. [
  8. matrix[layer][column],
  9. matrix[column][matrixLen-1-layer],
  10. matrix[matrixLen-1-layer][matrixLen-1-column],
  11. matrix[matrixLen-1-column][layer]
  12. ]
  13. =
  14. [
  15. matrix[matrixLen-1-column][layer],
  16. matrix[layer][column],
  17. matrix[column][matrixLen-1-layer],
  18. matrix[matrixLen-1-layer][matrixLen-1-column]
  19. ]
  20. }
  21. }
  22. };

题解2

1. 思路:翻转
  1. 先水平翻转
  2. 再转置(沿主对角线翻转)
2. 时间复杂度:O(n²)
3. 空间复杂度:O(1)
4. 实现
  1. /** * @param {number[][]} matrix * @return {void} Do not return anything, modify matrix in-place instead. */
  2. var rotate = function(matrix) {
  3. let matrixLen = matrix.length;
  4. // 先水平翻转
  5. for(let i=0, maxI=Math.floor(matrixLen/2); i<maxI; i++){
  6. [matrix[i], matrix[matrixLen-1-i]] = [matrix[matrixLen-1-i], matrix[i]];
  7. }
  8. // 再转置(沿主对角线翻转)
  9. for(let i=0; i<matrixLen; i++){
  10. for(let j=i+1; j<matrixLen; j++){
  11. [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
  12. }
  13. }
  14. };

发表评论

表情:
评论列表 (有 0 条评论,343人围观)

还没有评论,来说两句吧...

相关阅读

    相关 48. 旋转图像

    给定一个 n × n 的二维矩阵 `matrix` 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在[ 原地][Link 1] 旋转图像,这意味着你需要直接修改输入的

    相关 图像旋转

    旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。    计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 

    相关 图像旋转

    描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出。 输入第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <=

    相关 CCF 图像旋转

    一.问题描述   旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。   计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对