54 螺旋矩陣

2021-10-17 18:55:11 字數 1832 閱讀 3605

題目描述

給定乙個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。

示例 1:

輸入:

[ [ 1, 2, 3 ],

[ 4, 5, 6 ],

[ 7, 8, 9 ]

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

示例2:

輸入:

[ [1, 2, 3, 4],

[5, 6, 7, 8],

[9,10,11,12]

]輸出: [1,2,3,4,8,12,11,10,9,5,6,7]

題解:

模擬。但寫法還是有點技巧的。首先移動的方向是右 下 左 上,不停的依次迴圈這 4 個方向,直到遍歷完所有元素。

那麼我們就要按照上述四個方向走,模擬下標的變化。

有兩種寫法:

第一種是手動模擬這個過程,稍微麻煩點,但好理解:

class

solution

;int m = matrix[0]

.size()

;if(!m )

return

;int flag =

1008611

; vector<

int>

ret(n * m)

;int sx =

0, sy =

0, k =0;

while

( k < m * n )

++sx,

--sy;

while

( sx < n && matrix[sx]

[sy]

!= flag )

--sx,

--sy;

while

( sy >=

0&& matrix[sx]

[sy]

!= flag )

--sx,

++sy;

while

( sx >=

0&& matrix[sx]

[sy]

!= flag )

++sx,

++sy;

}return ret;}}

;/*記憶體:6.6mb,擊敗:95.50%

*/

第二種是使用乙個方向變數d控制移動方向,使用兩個陣列記錄對應方向上座標的偏移量,只要保證d的改變和座標偏移量一一對應即可。

class

solution

;int m = matrix[0]

.size()

;if(!m )

return

; vector<

int> dx

; vector<

int> dy

;int flag =

1008611

; vector<

int>

ret(n * m)

;int sx =

0, sy =

0, d =

0, tx, ty;

for(

int i =

0; i < n * m;

++i )

sx = tx;

sy = ty;

}return ret;}}

;/*記憶體:6.6mb,擊敗:98.10%

*/

54 螺旋矩陣

給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...

54 螺旋矩陣

給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。輸入 1,2,3 4,5,6 7,8,9 輸出 1 2,3 6,9 8,7 4,5 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1 2,3 4,8 12,11 10,9 5,6 ...

54 螺旋矩陣

給你乙個 m 行 n 列的矩陣 matrix 請按照 順時針螺旋順序 返回矩陣中的所有元素。示例一 輸入 matrix 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例二 輸入 matrix 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4...