Leetcode No 54 螺旋矩陣

2021-10-22 12:25:41 字數 1422 閱讀 6492

給你乙個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。

示例 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]

從外部向內部逐層遍歷列印矩陣,最外面一圈列印完,裡面仍然是乙個矩陣

統計矩陣的層數,每一層最多會佔據兩行或者兩列,最少會佔據一行或者一列元素,圈層如下圖:

int columns=matrix[0].length;//列數

int rows=matrix.length;//行數

int count = (math.min(rows, columns)+1)/2;//圈數

列印每層的矩陣時,要經歷四個階段

step1:橫座標不變,縱座標遞增,如上圖第0圈的1,3,4

step2:縱座標不變,橫座標遞增,如上圖第0圈的8,12,16,20

step3:橫座標不變,縱座標遞減,如上圖第0圈的19

step4:縱座標不變,橫座標遞減,如上圖第0圈的17,13,9,5

針對於單行單列的case,為了防止step1和step3,step2和step4彼此出現重複遍歷

在step3加限制條件,當前圈層佔據兩行。

在step4加限制條件,當前圈層佔據兩列。

class solution 

//縱座標不變,橫座標遞減,針對於單列的case,為了防止重複遍歷末尾元素,限制圈層佔據兩列

for(int i=rows-k-1,j=k;(i>k)&&((columns-2*k)>1);i--)

}return list;}}

時間複雜度:o(mn),其中 m 和 n 分別是輸入矩陣的行數和列數。矩陣中的每個元素都要被訪問一次。

空間複雜度:o(1),只需要常數個變數。

leetcode No 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 輸入 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 ...