一、要求
对矩阵进行蚊香式打印
例如,如果输入如下矩阵:
[[ 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.
二、思路及代码
蚊香式一圈一圈打印,每一圈分成四笔完成(左右,上下,右左,下上),由于最后一圈具有不确定性(只有一笔,两笔,三笔,四笔),因此除step1外需要判断。分四步:
step1:左右 A[start][start]——A[start][endY]
step2:上下 A[start+1][endY]——A[endX][endY]
step3:右左 A[endX][endY-1]——A[endX][start]
step4:下上 A[endX-1][start]——A[start+1][start]
step2,step3,step4的判断依据是:start与 endX,endY的关系,以此判断有没有这一笔
start从0开始,+1直到min(行数/2,列数/2)
def printMatrix(A): if A==None: return rows=len(A) columns=len(A[0]) start=0 while rows>start*2 and columns>start*2: PrintMatrixInCircle(A,rows,columns, start) start+=1 print('') ## def PrintMatrixInCircle( A, rows,columns, start): endX=rows-1-start endY=columns-1-start # 左右 A[start][start]——A[start][endY] for i in range(start,endY+1): num=A[start][i] print(num,' ',end='') #上下 A[start+1][endY]——A[endX][endY] if start<endX: for i in range(start+1, endX + 1): num = A[i][endY] print(num, ' ', end='') #右左 A[endX][endY-1]——A[endX][start] if start<endY and start<endX : for i in range(endY-1, start - 1,-1): num = A[endX][i] print(num, ' ', end='') #下上A[endX-1][start]——A[start+1][start] if start<endY: for i in range(endX-1, start,-1): num = A[i][start] print(num, ' ', end='') matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] matrix2 = [[1],[2],[3],[4],[5]] matrix3 = [[1,2],[3,4],[5,6],[7,8],[9,10]] printMatrix(matrix) printMatrix(matrix2) printMatrix(matrix3)
三、运行结果
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
1 2 3 4 5
1 2 4 6 8 10 9 7 5 3
四、思考与总结
1,不换行print输出
print(number, ' ', end='')#end=' '意思是末尾不换行,加空格
需要注意在printMatrix函数的最后要print('')