[LintCode]螺旋矩阵python

简单的小思路,获取起始坐标和终点坐标,比如:一个n*m的矩阵,起始坐标是(0,0),最后一个位置的坐标是(n,m),很坐标不变,纵坐标从0加到m-1,然后纵坐标不变横坐标加到n-1·······,做完一圈后,终点的横纵坐标都减1,当起始的横纵坐标中任意一个大于终点坐标,立即停止,退出。当只有一行或者一列的时候,只需要加行或者列就行。

def spiralOrder(matrix):
    # 获取行和列号
    if matrix == []:
        return None
    line1 = len(matrix[0]) - 1  # 列
    line2 = len(matrix) - 1  # 行
    total_list = []
    start_line1 = 0
    start_line2 = 0
    start_end_line1 = start_line1
    start_end_line2 = start_line2
    while start_line1 <= line1 and start_line2 <= line2:
        if line1 - start_line1 == 0:
            while start_line2 <= line2:
                total_list.append(matrix[start_line2][start_line1])
                start_line2 += 1
            return total_list
        elif line2 - start_line2 == 0:
            while start_line1 <= line1:
                total_list.append(matrix[start_line2][start_line1])
                start_line1 += 1
            return total_list
        while start_line1 < line1:
            total_list.append(matrix[start_line2][start_line1])
            start_line1 = start_line1 + 1
        while start_line2 < line2:
            total_list.append(matrix[start_line2][start_line1])
            start_line2 = start_line2 + 1
        while start_line1 > start_end_line1:
            total_list.append(matrix[start_line2][start_line1])
            start_line1 -= 1
        while start_line2 > start_end_line2:
            total_list.append(matrix[start_line2][start_line1])
            start_line2 -= 1
        line1 = line1 - 1  # 列
        line2 = line2 - 1  # 行
        start_line1 += 1
        start_line2 += 1
        start_end_line1 = start_line1
        start_end_line2 = start_line2
    return total_list

if __name__ == '__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、付费专栏及课程。

余额充值