将矩阵转换为整数列表,作为给定矩阵的螺旋

时间:2015-06-09 18:57:53

标签: python-2.7 matrix spiral

在下面的程序中,输出应该打印程序中给出的矩阵螺旋中的整数列表。

输出为:[1, 2, 3, 6, 9, 8, 7, 4, 5, 5]

在输出列表的末尾,最后一个循环再次以相反的顺序打印(列表末尾的5再次打印)。为什么?我的代码在哪里出错?

A = [
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ]
]

def spiralOrder(A):

    result = []
    t = 0
    b = len(A)-1
    l = 0
    r = len(A[0])-1
    d = 0
    k = 0
    while(t<=b and l<=r):
        if d == 0:
            for i in range(l,r+1):
                result.append(A[t][i])
            t =+ 1
            d = 1
        elif d == 1:
            for i in range(t,b+1):
                result.append(A[i][r])
            r -= 1
            d = 2
        elif d == 2:
            for i in range(r,l-1,-1):
                result.append(A[b][i])
            b -= 1
            d = 3
        elif d == 3:
            for i in range(b,t-1,-1):
                result.append(A[i][l])
            l += 1
            d = 0
    return result

print spiralOrder(A)

2 个答案:

答案 0 :(得分:2)

这是添加最后5个的第二个result.append()语句。这是因为此时t是错误的值。切换t =+ 1 t += 1可解决此问题。

为什么

t =+ 1t = +1t = 1相同(此处不会增加)。

t += 1每次调用增加一个。

提示

这是使用python debugger的主要候选人。许多IDE都内置了这个。在每个result.append()语句上放置断点并逐步执行代码,您将很快看到出现了什么问题。

此外,您的变量名称完全是神秘的,并且很难确定您的代码尝试执行的操作。查看clean code and variable names,特别是如果您的代码将由其他任何人(例如SO的人)阅读。

答案 1 :(得分:1)

您正在更新t =+ 1,而不是t += 1。 (在d==0条件下)。