給你乙個 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 ...