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

LeetCode 54 Spiral Matrix:螺旋遍歷矩陣的方向控制法

     編輯:關於C++

題目大意

給定 m×n 矩陣,按順時針螺旋順序返回所有元素。
例:[[1,2,3],[4,5,6],[7,8,9]] → [1,2,3,6,9,8,7,4,5]

方向狀態機法

維護四個方向:右(0)→下(1)→左(2)→上(3)。用 visited 標記已走過的格子。當下一步越界或已訪問,順時針轉向。直到無法移動(所有格子已訪問)。

Java 實現

public List spiralOrder(int[][] a) {
    List res = new ArrayList<>();
    if (a.length == 0) return res;
    int t = 0, b = a.length-1, l = 0, r = a[0].length-1;
    while (t <= b && l <= r) {
        for (int j = l; j <= r; ++j) res.add(a[t][j]); t++;
        for (int i = t; i <= b; ++i) res.add(a[i][r]); r--;
        if (t <= b) for (int j = r; j >= l; --j) res.add(a[b][j]); b--;
        if (l <= r) for (int i = b; i >= t; --i) res.add(a[i][l]); l++;
    }
    return res;
}

複雜度

時間 O(mn),空間 O(mn) 或 O(1)(不計輸出)。邊界收縮法更優雅,無需額外 visited 數組。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved