快轉到主要內容
leetcode 48 - Rotate Image

leetcode 48 - Rotate Image

·
類別 
Leetcode
標籤 
Java Leetcode Medium Array Problem Blind75
Eason Chiu
作者
Eason Chiu
一個不做筆記就容易忘記的工程師
目錄

題目
#

leetcode 48 - Rotate Image (題目說明請點連結)

題目簡述
#

給一個 n×n 的二維矩陣,代表一個圖像,將圖像順時針旋轉 90 度。
要求:必須在原地旋轉,不能使用額外的矩陣空間。

範例
#

Example 1:

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [[7,4,1],[8,5,2],[9,6,3]]

旋轉前:

[
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

旋轉後:

[
  [7, 4, 1],
  [8, 5, 2],
  [9, 6, 3]
]

Example 2:

Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

旋轉前:

[
  [5,  1,  9,  11],
  [2,  4,  8,  10],
  [13, 3,  6,  7],
  [15, 14, 12, 16]
]

旋轉後:

[
  [15, 13, 2,  5],
  [14, 3,  4,  1],
  [12, 6,  8,  9],
  [16, 7,  10, 11]
]

解題思路
#

這題要求我們將一個 n×n 的矩陣順時針旋轉 90 度。我們可以使用兩步操作來實現旋轉:先對矩陣進行轉置(transpose),然後對每一行進行反轉。

解法
#

兩步旋轉法(Two-Step Rotation Approach)

  1. 對矩陣進行轉置操作,即將 matrix[i][j]matrix[j][i] 交換
  2. 對每一行進行反轉操作,即將 matrix[i][j]matrix[i][n-j-1] 交換
  3. 完成旋轉

步驟
#

  • 轉置操作:
    • 遍歷矩陣的上三角部分,交換 matrix[i][j]matrix[j][i]
    • 主對角線(左上 → 右下)為對稱軸
  • 水平翻轉操作:
    • 對每一行進行反轉,交換 matrix[i][j]matrix[i][n-1-j]
  • 完成旋轉:
    • 矩陣順時針旋轉 90 度完成

例子說明
#

matrix = [[1,2,3],[4,5,6],[7,8,9]]

原始矩陣

[
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

Step 1:轉置

[
  [1, 4, 7],
  [2, 5, 8],
  [3, 6, 9]
]

Step 2:水平翻轉

[
  [7, 4, 1],
  [8, 5, 2],
  [9, 6, 3]
]

完整程式碼
#

java
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;

        // 第一步:對矩陣進行轉置操作
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }

        // 第二步:對每一行進行反轉操作
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n / 2; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[i][n - j - 1];
                matrix[i][n - j - 1] = temp;
            }
        }
    }
}

時間複雜度
#

  • 時間複雜度O(n²),其中 n 是矩陣的邊長,需要遍歷整個矩陣
  • 空間複雜度O(1),只使用了常數個變數,原地操作

相關文章

leetcode 73 - Set Matrix Zeroes
類別 
Leetcode
標籤 
Java Leetcode Medium Array Problem Blind75
leetcode 153 - Find Minimum in Rotated Sorted Array
類別 
Leetcode
標籤 
Java Leetcode Medium Array Problem Binary Search Problem Blind75
leetcode 128 - Longest Consecutive Sequence
類別 
Leetcode
標籤 
Java Leetcode Medium Array Problem Blind75