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