每日一練(17) 順時針列印矩陣

2022-09-20 23:21:11 字數 1699 閱讀 1472

title: 每日一練(17):順時針列印矩陣

categories:[劍指offer]

tags:[每日一練]

date: 2022/02/12

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

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

限制:0 <= matrix.length <= 100

0 <= matrix[i].length <= 100

根據題目示例 matrix = [[1,2,3],[4,5,6],[7,8,9]] 的對應輸出 [1,2,3,6,9,8,7,4,5] 可以發現,順時針列印矩陣的順序是 「從左向右、從上向下、從右向左、從下向上」 迴圈。

因此,考慮設定矩陣的「左、上、右、下」四個邊界,模擬以上矩陣遍歷順序。

演算法流程:

1.空值處理: 當 matrix 為空時,直接返回空列表 即可。

2.初始化: 矩陣 左、右、上、下 四個邊界 l , r , t , b ,用於列印的結果列表 res 。

3.迴圈列印: 「從左向右、從上向下、從右向左、從下向上」 四個方向迴圈,每個方向列印中做以下三件事 (各方向的具體資訊見下表) ;

4.返回值: 返回 res 即可。

列印方向

1. 根據邊界列印

2. 邊界向內收縮

3. 是否列印完畢

從左向右

左邊界 l ,右邊界 r

上邊界 t 加 1

是否 t > b

從上向下

上邊界 t ,下邊界 b

右邊界 r 減 1

是否 l > r

從右向左

右邊界 r ,左邊界 l

下邊界 b 減 1

是否 t > b

從下向上

下邊界 b ,上邊界 t

左邊界 l 加 1

是否 l > r

複雜度分析:

vectorspiralorder(vector>& matrix) ;

}vectorres;

int l = 0; //左邊界

int r = matrix[0].size() - 1; //右邊界

int t = 0; //上邊界

int b = matrix.size() - 1; //下邊界

while (true)

if (++t > b)

//top -> bottom

for (int i = t; i <= b; i++)

if (--r < l)

//right -> left

for (int i = r; i >= l; i--)

if (--b < t)

//bottom -> top

for (int i = b; i >= t; i--)

if (++l > r)

}return res;

}

順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 45 6 7 89 10 11 1213 14 15 16則依次列印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。這個題目 寫的並不好感覺,好多if看著就煩,就是...

順時針列印矩陣

題目 給定乙個矩陣,從外向內順時針列印矩陣中的每乙個數字。例如 給定矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 輸出應該為 分析 這道題的意思非常直觀,給人的感覺也是so easy,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種...

順時針列印矩陣

from 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次列印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。網上聽說聽到包括autod...