劍指 Offer 29 順時針列印矩陣

2021-10-08 14:34:00 字數 1494 閱讀 4900

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。

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

就像剝橘子皮一樣,由外向內逐層按照順時針的順序逐層剝橘子皮。

//思路:由外向內,逐層列印

public

static

int[

]spiralorder

(int

matrix)

int rows = matrix.length;

int columns = matrix[0]

.length;

int top =0;

int bottom = rows -1;

int left =0;

int right = columns -1;

int[

] orders =

newint

[rows * columns]

;int index =0;

while

(left <= right && top <= bottom)

//從上向下列印

for(

int row = top +

1; row <= bottom; row++

)//這一句是為了防止最後只剩下一行一列的時候重複遍歷

if(left < right && top < bottom)

//從下向上列印

for(

int row = bottom; row > top; row--)}

left++

; right--

; bottom--

; top++;}

return orders;

}

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

空間複雜度:o(1)。除了輸出陣列以外,空間複雜度是常數。

劍指offer 29 順時針列印矩陣

分析 每次列印一圈,用start來確定起始列印的點,從0開始,每次增加1,中點是最後列印的乙個點,因此迴圈條件是start2 columns start2 rows,如果用start columns 2 start rows 2會在5 2的時候出錯。列印一圈數字有四個方向 從左到右 從上到下 前提是...

劍指Offer 29 順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。輸入 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,8,12,11,10,9,5,6,7 解題過...

劍指 Offer 29 順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。示例 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...