1

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

输出是:[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)
4

2 回答 2

2

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


为什么

t =+ 1t = +1与or相同t = 1(这里没有递增)。

t += 1每次调用将 t 加一。


提示

这是使用python 调试器的主要候选者。许多 IDE 将内置此功能。在您的每个result.append()语句上放置断点并单步执行您的代码,您将很快看到哪里出了问题。

此外,您的变量名称是完全神秘的,并且很难弄清楚您的代码正在尝试做什么。检查干净的代码和变量名,特别是如果您的代码将被其他任何人(如 SO 的人)阅读。

于 2015-06-09T19:19:30.113 回答
1

你正在更新t =+ 1你应该做的地方t += 1。(d==0有条件)。

于 2015-06-09T19:15:37.737 回答