N個の整数の配列が順列(1からNまでの各要素を含むシーケンス)かどうかを調べるroutineを解析しています。
私はPythonの初心者です。私はこのルーチンが正解をどのように得るのか把握できません。ループの背後にある論理について誰も説明できますか?とりわけcounter[element-1]
の使用。
カウンタは組み込み関数がAのすべての要素で機能していますか?ループが配列上に定義されているため、counter[element-1]
はAの要素の位置/値を参照するのがデフォルトですか?
Python - N個の整数からなる配列が順列であるかどうかをチェック
A=[4,1,3,2]
def solution(A):
counter = [0]*len(A)
limit = len(A)
for element in A:
if not 1 <= element <= limit:
return 0
else:
if counter[element-1] != 0:
return 0
else:
counter[element-1] = 1
return 1
更新: 私は、例えば
def solution(A):
counter = [0]*len(A)
limit = len(A)
for element in A:
if not 1 <= element <= limit:
print element
print 'outside'
return 0
else:
if counter[element-1] != 0:
print 'element %d' % element
print [element-1]
print counter[element-1]
return 0
else:
counter[element-1] = 1
print 'element %d' % element
print [element-1]
print counter[element-1]
return 1
が、私はまだない私に
element 4
[3]
1
element 1
[0]
1
element 3
[2]
1
element 2
[1]
1
1
を与え、ループ内で使用される値を参照するためにコードを修正論理を得る。たとえば、最初の要素に注目すると、[3]が1を返すのはなぜですか?
デバッガでコードをステップ実行してみてください。 –
Btw入力に非整数がある場合、関数はチョークします。 –
エラー証明ソリューションでJavaと全く同じではありませんが、カウンタは0で初期化された 'N'要素のリストです。配列「A」の要素を反復するとき、インデックス付けはゼロに基づくので、例えば、要素 '5'の場合は、unset(= 0)なら 'counter [5-1]'をチェックします。 – fips