題目連結:
題目意譯:
給定一個 m × n 的矩陣,以螺旋的順序來回傳該矩陣中的元素。
限制:
m == matrix.length
n == matrix[i].length
1 ≦ m 、 n ≦ 10
-100 ≦ matrix[i][j] ≦ 100
範例測資:
範例 1:
輸入: matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出: [1,2,3,6,9,8,7,4,5]
範例 2:
輸入: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
輸出: [1,2,3,4,8,12,11,10,9,5,6,7]
解題思維:
依序以下步驟:
往右走若干行、
往下走若干列、
往左走若干行、
往上走若干列、
往右走若干行、
……
可以看到往左往右是只會改變行數、往上往下只會更動列數。而每次往左或右走的行數都比上一次往左或右走還要少一行;同樣地,每次往上下走的行數都比上一次往上下走還要少一列。這樣便可以產生一個螺旋形的行走路徑。
因此我們從 matrix 最左上角的「左側」(即位於「第 0 列第 -1 行」)開始要走入 matrix。接著我們就:
往右走 n 行、
往下走 m - 1 列、
往左走 n - 1 行、
往上走 m - 2 列、
往右走 n- 2 行、
……重複這樣子走,直到我們遇到走的步數(行數或是列數)為 0 為止。而中途所有經過的 matrix 之位置便會形成所求之序列。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。