20180703剑指offer题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,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('')

猜你喜欢

转载自blog.csdn.net/weixin_41819299/article/details/81149597