转圈打印矩阵

来源:互联网 发布:java三级证书有用吗 编辑:程序博客网 时间:2024/05/13 01:19

【题目】

给定一个整型矩阵matrix,请按照转圈的方式打印

例如

1   2   3   4

5   6   7   8

9   10  11  12

13  14  15  16

打印结果为:1,2,3,48,12,16,15,14,13,9,5,6,7,11,10

【要

额外空间复杂度为O1

【难度】1

 

# -*- coding:utf-8 -*-

'''
C语言改编
cxy
主要思想:
tRtC代表左上角坐标
dRdC代表右下角坐标
取外层进行转圈打印后缩小圈进行里圈打印。
'''

# 定义一个函数,按照这个函数来进行圈缩小
def spiralOrder(matrix):
    tR = 0
    tC =0
    dR =len(matrix) -1
    dC =len(matrix[0]) -1
    while(tR <= dRand tC <= dC):
        printEdge(matrix,tR,tC,dR,dC)
        tR += 1
        tC +=1
        dR -=1
        dC -=1

# printEdge函数用于转圈打印
def printEdge(matrix,tR,tC,dR,dC):
    iftR == dR:
        fori inrange(tC,dC + 1):
            print(matrix[tR][i])
    eliftC == dC:
        fori inrange(tR,dR + 1):
            print(matrix[i][tC])
    else:
        curC = tC
        curR = tR
        whilecurC != dC:
            print(matrix[tR][curC])
            curC += 1
        whilecurR != dR:
            print(matrix[curR][dC])
            curR += 1
        whilecurC != tC:
            print(matrix[dR][curC])
            curC -= 1
        whilecurR != tR:
            print(matrix[curR][tC])
            curR -= 1


if __name__in "__main__":
    matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
    print(spiralOrder(matrix))

原创粉丝点击