[Programmers]DFS/BFS-ターゲット番号(Python)
ソースProgrammers符号化テストハイスコアスイート
n個の非負の整数.この数字を適当に加算または減算してターゲット番号を作成したいです.たとえば、[1,1,1,1,1,1]で数値3を作成するには、次の5つの方法があります.
与えられた数字は20を超えない. 各数字は1または50未満の自然数です. TargetNumberは1または1000以下の自然数である.
numberstargetreturn[1, 1, 1, 1, 1]35
問題の例は次のとおりです.
私は
DFS関数が呼び出されるたびに、
私のコードの中の
DFS/BFS:目標番号[LV 2]
問題の説明
n個の非負の整数.この数字を適当に加算または減算してターゲット番号を作成したいです.たとえば、[1,1,1,1,1,1]で数値3を作成するには、次の5つの方法があります.
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
使用可能な数値の配列番号、ターゲット番号のターゲットをパラメータとして指定したときに、適切に数値を加算して減算して、ターゲット番号を作成する方法の数を返します.せいげんじょうけん
I/O例
numberstargetreturn[1, 1, 1, 1, 1]35
I/O例説明
問題の例は次のとおりです.
Solution
説明する
def DFS(numbers, target, tot):
if len(numbers) == 0:
if tot == target:
return 1
else:
return 0
else:
res = 0
res += DFS(numbers[:-1], target, tot + numbers[-1])
res += DFS(numbers[:-1], target, tot - numbers[-1])
return res
def solution(numbers, target):
answer = DFS(numbers, target, 0)
return answer
これは典型的なDFS問題である.私は
numbers
で最後の要素から始め、再帰関数を呼び出すときに値を渡す必要がある可能性があるので、パラメータ付きDFS
関数を作成して使用します.DFS関数が呼び出されるたびに、
numbers
の要素の1つが失われ、numbers
に要素がない場合は最後まで実行され、tot
とtarget
と比較され、同じ場合は1を返し、異なる場合は0を返します.numbers
の要素には加算と減算の2つのケースがあるため、DFS
関数を呼び出すには2つの方法がある.その後、2回の呼び出しで2つの戻り値が返されます.結果
Best Code
def solution(numbers, target):
if not numbers and target == 0 :
return 1
elif not numbers:
return 0
else:
return solution(numbers[1:], target-numbers[0]) + solution(numbers[1:], target+numbers[0])
solution
が呼び出されると、numbers
に欠落している要素の値に基づいてtarget
から減算または加算されます.これは私が説明したコードの中のtot
を必要としません.私のコードの中の
numbers
の要素の記号が+の場合、tot
の記号は+の場合、このコードはtarget
から減算されます.したがって、numbers
に要素がなく、target
0であれば、条件はすべて満たされる.条件が満たされている場合は1を返し、そうでない場合は0を返します.numbers
の要素がまだ存在する場合、再帰関数が再び呼び出され、要素値target
のいずれかを減算すると、2つが呼び出され、受信した戻り値が加算され、返されます.Reference
この問題について([Programmers]DFS/BFS-ターゲット番号(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@deannn/Programmers-DFSBFS-타겟-넘버-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol