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)且不使用任何额外空间的代码。

更新于:2023年4月12日

237 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告