首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode Rotate Image:原地矩陣順時針旋轉 90°

     編輯:關於C++

題目大意

給定 n×n 矩陣,原地順時針旋轉 90 度。

核心變換:兩次翻轉

順時針 90° = **左右翻轉** + **主對角線翻轉**

或:**上下翻轉** + **副對角線翻轉**

或:**轉置** + **每行反轉**

方法一:轉置 + 行反轉(最直觀)


void rotate(vector>& matrix) {
    int n = matrix.size();
    // 轉置:swap(matrix[i][j], matrix[j][i]) for i

方法二:層層旋轉(單層循環)


void rotate(vector>& matrix) {
    int n = matrix.size();
    for (int layer = 0; layer < n/2; ++layer) {
        int first = layer, last = n - 1 - layer;
        for (int i = first; i < last; ++i) {
            int offset = i - first;
            int top = matrix[first][i];
            // left -> top
            matrix[first][i] = matrix[last-offset][first];
            // bottom -> left
            matrix[last-offset][first] = matrix[last][last-offset];
            // right -> bottom
            matrix[last][last-offset] = matrix[i][last];
            // top -> right
            matrix[i][last] = top;
        }
    }
}

複雜度

  • 時間:O(n²) — 必須訪問每個元素一次
  • 空間:O(1) — 原地操作

關鍵點

  • 轉置只需遍歷上三角(或下三角),避免重複交換
  • 層層旋轉法直觀對應幾何操作,面試中易於解釋
  • n 為奇數時中心元素不動,循環條件 `layer < n/2` 自然處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved