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)且不使用任何額外空間的程式碼。
廣告