順時針轉圈列印陣列

2021-09-25 17:44:42 字數 2245 閱讀 8953

所謂順時針轉圈列印數字,即從外往內列印陣列,一圈一圈地列印,這是劍指offer的第20題。

這個題的思路是這樣的:

首先,列印的條件是rows>2*start and cols>2*start,然後把列印一圈分為四步

首先從左到右列印一行,這一步是任意情況都要執行的,即使只有11列;

然後從上到下列印一列,這一步的條件是至少有兩行;

再執行從右到左列印一行,這一步的條件是至少有兩行兩列,因為若只有兩行一列,那麼在第2步就列印完成了;

最後執行從下到上列印一列,這一步的條件是至少有三行兩列。

現在問題轉化為如何具體化上述每一步的執行條件和列印的範圍,首先需要明確的是列印的起始座標是橫縱相等的,設其為start,則橫方向上列印的最大座標為endx = cols - 1 - start,列方向上列印的最大座標為endy = rows - 1 - start,現在確定每一步的條件和列印範圍。

無條件,列印座標為matrix[start][i],i的範圍為[start,endx]

條件為:endy>start,列印座標為matrix[i][endx]i的範圍為[start+1,endy]

條件為:endy>start and endx>start,列印座標為matrix[endy][i],i的範圍為[endx-1,start];(注意這裡是反向的)

條件為:endy>start+1 and endx>start,列印座標為matrix[i][start],i的範圍為[endy-1,start+1];(注意這裡是反向的)

即列印方式為:

# 第一步,從左到右列印一行

for i in

range

(start,endx+1)

:print

(matrix[start]

[i])

# 第二步,從上到下列印一列

# 要求至少有兩行

if endy > start:

for i in

range

(start+

1,endy+1)

:print

(matrix[i]

[endx]

)# 第三步,從右到左列印一行

# 要求至少有兩行兩列

if endy > start and endx > start:

for i in

reversed

(range

(start,endx)):

print

(matrix[endy]

[i])

# 第四步,從下到上列印一列

# 要求至少有三行兩列

if endy > start +

1and endx > start:

for i in

reversed

(range

(start+

1,endy)):

print

(matrix[i]

[start]

) start +=

1

順時針列印陣列

面試題20 順時針列印矩陣 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如如果輸入如下矩陣 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,1,10 我的 如下 ...

4 陣列 順時針列印陣列

思路 首先判斷迴圈退出的條件 5x5 矩陣 2 2 6 6 2 2 只要col 2 k row 2 k k k 最後一次列印的起始位置 然後迴圈 列印陣列 上面一行 沒有限制條件 右面一列 只有中止行數 起始行數 下面一行 中止行數 起始行數 中止列數 起始列數至少兩行兩列 最左邊一列 中止行數 起...

演算法題 順時針列印陣列

思路 1.一圈圈的列印,開始點為左上角 0,0 1.第一圈 0,0 2.第二圈 1,1 3.第n圈 n,n 2.總共可以列印多少圈,n為行與列的一半,超出就終止 python實現 def print one circle array input,rows,cols,start ret if len ...