算法:順時(shí)針打印矩陣

輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。
示例
輸入: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]
限制
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
方法:按層模擬
對(duì)于本題,我們可以按照“按層模擬”的思路去實(shí)現(xiàn),如下圖所示:

算法流程:
特例終止條件:如果矩陣為空,直接返回空數(shù)組;
確定第一層的上下左右四個(gè)起始點(diǎn);
初始化長(zhǎng)度為矩陣長(zhǎng)度的結(jié)果數(shù)組,并初始化一個(gè)自增值,用于動(dòng)態(tài)賦值;
逐層遍歷:
從左到右依次從(top,left)到(top,right);
從上到下依次從(top+1,right)到(bottom,right);
如果 left < right 并且 top < bottom時(shí), 從右到左依次從(bottom,right-1)到(bottom,left+1);
如果 left < right 并且 top < bottom時(shí),從下到上依次從(bottom,left)到(top+1,left);
left 加一,right 減一,top 加一,bottom 減一,進(jìn)入下一層按上述步驟遍歷;
返回結(jié)果數(shù)組。
代碼如下:

復(fù)雜度分析
時(shí)間復(fù)雜度:O(mn),其中 m 和 n 分別是輸入矩陣的行數(shù)和列數(shù)。矩陣中的每個(gè)元素都要被訪問一次。
空間復(fù)雜度:O(1)。除了輸出數(shù)組以外,空間復(fù)雜度是常數(shù)。
END
好兄弟可以點(diǎn)贊并關(guān)注我的公眾號(hào)“javaAnswer”,全部都是干貨。
