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)且不使用任何額外空間的程式碼。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP