Spiral Matrix

本文介绍了一种矩阵螺旋遍历的算法实现,该算法能够按螺旋顺序返回矩阵的所有元素。通过定义上下左右边界并逐步更新边界值的方式,实现了对矩阵元素的有效遍历。
Given a matrix ofmn elements (mrows, n columns), return all elements of the matrix in spiral order.
For example, Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].


invariant: 任何时候都对应一个当前有效的上、下、左、右的界。 在当前上、下、左、右界内依次输出每条边,同时更新相应的界,如果上下界或者左右界交错,算法结束。

def spiralOrder(matrix):
    res = []
    startX, endX, startY, endY = 0, len(matrix[0]) - 1, 0, len(matrix) - 1
    while True:
        for j in xrange(startX, endX + 1):
            res.append(matrix[startY][j])
        startY += 1
        if startY > endY: break
    
        for i in xrange(startY, endY + 1):
            res.append(matrix[i][endX])
        endX -= 1
        if startX > endX: break
    
        for j in xrange(endX, startX - 1, -1):
            res.append(matrix[endY][j])
        endY -= 1
        if startY > endY: break
    
        for i in xrange(endY, startY - 1, -1):
            res.append(matrix[i][startX])
        startX += 1
        if startX > endX: break
    return res;


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值