20180703剑指offer题20——顺时针打印矩阵

本文介绍了一种特殊的矩阵打印方式——蚊香式打印,并提供详细的实现思路与Python代码示例。通过四个步骤循环遍历矩阵,实现了从外向内螺旋式的打印效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、要求

    对矩阵进行蚊香式打印

例如,如果输入如下矩阵:
[[ 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('')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值