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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告