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 を追加するのは 2 番目のステートメントです。これはt、この時点で が間違った値であるためです。これを修正するt =+ 1ための切り替え。t += 1


どうして

t =+ 1t = +1orと同じですt = 1(ここではインクリメントは行われません)。

t += 1呼び出しごとに t を 1 ずつ増やします。


チップ

これは、python デバッガーを使用するための最有力候補です。多くの IDE にはこれが組み込まれています。各result.append()ステートメントにブレーク ポイントを配置し、コードをステップ実行すると、何が問題なのかがすぐにわかります。

また、変数名は完全に不可解であり、コードが何をしようとしているのかを理解するのが非常に難しくなります。特にあなたのコードが他の誰か (SO の人々など) に読まれる場合は、クリーンなコードと変数名を確認してください。

于 2015-06-09T19:19:30.113 に答える