转圈打印矩阵

【题目】

给定一个整型矩阵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 <= dR and tC <= dC):
        printEdge(matrix, tR, tC, dR, dC)
        tR += 1
        tC += 1
        dR -= 1
        dC -= 1

# printEdge函数用于转圈打印
def printEdge(matrix, tR, tC, dR, dC):
    if tR == dR:
        for i in range(tC, dC + 1):
            print(matrix[tR][i])
    elif tC == dC:
        for i in range(tR, dR + 1):
            print(matrix[i][tC])
    else:
        curC = tC
        curR = tR
        while curC != dC:
            print(matrix[tR][curC])
            curC += 1
        while curR != dR:
            print(matrix[curR][dC])
            curR += 1
        while curC != tC:
            print(matrix[dR][curC])
            curC -= 1
        while curR != 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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值