原文:48. 旋转图像(力扣 面试题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-048/

题目:

难度:Middle

相关话题:数组

给定一个 n ×n 的二维矩阵表示一个图像。

将图像顺时针旋转 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]
]
/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
// 最简单的办法,先reverse然后沿对角线翻转便可
var rotate = function(matrix) {
    matrix.reverse();
    for (let i = 0; i < matrix.length; i++) {
        for (let j = i + 1; j < matrix[i].length; j++){
            let temp=matrix[i][j]
            matrix[i][j]=matrix[j][i]
            matrix[j][i]=temp
        }
    }
}

/*-----------------------------------*/
// var rotate = function(matrix) {
//   let len=matrix.length
//   // return 对应的新矩阵当前值的位置
//   function o2n(x,y){
//     return [y,matrix.length-1-x]
//   }
//   let temp1,temp2,x,y,re,halfLen=Math.floor(len/2)
//   for(let i=0;i<halfLen;i++){
//     for(let j=i;j<len-1-i;j++){
//       let initI=i,initJ=j
//       temp2=matrix[initI][initJ]
//       re=false
//       while(!re){
//         [x,y]=o2n(initI,initJ)
//         temp1=matrix[x][y]
//         matrix[x][y]=temp2
//         temp2=temp1
//         initI=x;initJ=y
//         if(i===initI && j===initJ)re=true
//       }
//     }
//   }
// };

扩展阅读: