JavaScript 将矩阵顺时针旋转180度

JavaScript 将矩阵顺时针旋转180度

一个方阵是一个有相等行数和列数的二维数组,我们要将矩阵逆时针旋转180度。逆时针旋转矩阵意味着先将所有的行转换为列,第一行将成为第一列,然后再次将行转换为列,第一行将成为第一列,以此类推。

让我们看一个示例−

Input 1:
N = 3
Matrix = [ [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9] ]
Output 1:
Matrix = [ [9, 8 ,7],
   [6, 5, 4],
   [3, 2, 1] ]

Input 2:
N = 5
Matrix = [ [1, 2, 3, 4, 5],
   [6, 7, 8, 9, 10],
   [11, 12, 13, 14, 15],
   [16, 17, 18, 19, 20],
   [21, 22, 23, 24, 25] ]
Output 2:
Matrix = [ [25, 24, 23, 22, 21],
   [20, 19, 18, 17, 16],
   [15, 14, 13, 12, 11],
   [10, 9, 8, 7, 6],
   [5, 4, 3, 2, 1] ]

原生方法

让我们看一个示例

N = 3;
Matrix = [ [00, 01, 02],
   [10, 11, 12],
   [20, 21, 22] ]

我们将矩阵逆时针旋转90度(第一次)

Matrix become = [ [02, 12, 22],
   [01, 11, 21],
   [00, 10, 20] ]

再次将矩阵旋转90度(第二次旋转后成为90+90=180度)

Matrix become = [ [22, 21, 20],
   [12, 11, 10],
   [02, 01, 00] ]

所以基本上,如果我们从n-1到0(包括)遍历矩阵的行,在嵌套的for循环中,我们遍历从n-1到0(包括)的列,就能得到旋转后的矩阵。为了更好地理解,让我们看一下下面这种方法的代码。

示例

//function for rotate the matrix 
function rotateMatrix( matrix){
   // getting size of the matrix 
   var n = matrix.length;
   // start getting elements for the last row 
   for(var i = n-1; i >= 0; i--){
      var temp = "";
      // start getting elements for the last column
      for(var j = n-1; j >= 0; j--){
         temp += matrix[i][j] + " ";
      }
      console.log(temp);
   }
}
// defining the matrix 
var n = 4;
var mat = [ [ 1, 2, 3, 4 ],
   [ 5, 6, 7, 8 ],
   [ 9, 10, 11, 12],
   [ 13, 14, 15, 16]];
console.log("Matrix after rotation is: ")
//calling the function
rotateMatrix(mat);

时间复杂度和空间复杂度

上述代码的时间复杂度为O(N*N),其中N是给定矩阵的行数或列数,因为我们只遍历了一次。

上述代码的空间复杂度为O(1),因为我们没有使用额外的空间。

将结果存储在给定矩阵中

在这种方法中,我们将结果存储在我们拥有的矩阵中,不使用任何额外的空间。我们可以看到第一行和最后一行以相反的顺序进行交换。同样,第二行和倒数第二行以相反的方式交换。根据这个观察,我们可以编写以下代码:

示例

//function for rotate the matrix 
function rotateMatrix( matrix){
   // getting size of the matrix 
   var n = matrix.length;
   // start getting elements for the last row 
   for(var i = 0; i < n/2; i++){
      matrix[i].reverse();
      matrix[n-1-i].reverse();
      for(var j = 0; j<n;j++) {
         [matrix[i][j], matrix[n-1-i][j]] = [matrix[n-1-i][j], matrix[i][j]]
      }
   }
   console.log(matrix)
}
// defining the matrix 
var n = 4;
var mat = [ [ 1, 2, 3, 4 ],
   [ 5, 6, 7, 8 ],
   [ 9, 10, 11, 12],
   [ 13, 14, 15, 16]];
console.log("Input Matrix:  
", mat)
console.log("Matrix after rotation is: ")
//calling the function
rotateMatrix(mat);

时间和空间复杂度

上述代码的时间复杂度为O(N*N),其中N是给定矩阵的行数或列数,因为我们只遍历了一次。

上述代码的空间复杂度为O(1),因为没有使用额外的空间。

结论

在本教程中,我们看到了两种不同的方法来将给定的矩阵旋转180度。通过观察,我们得出结论,翻转的第一行的元素将与翻转的最后一行的元素互换位置。类似地,对于第二行和倒数第二行等等。我们实现了时间复杂度为O(N*N),并且没有使用额外空间的代码。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程