[プログラマ]ターゲット番号
問題のソース
n個の非負の整数.この数字を適当に加算または減算してターゲット番号を作成したいです.たとえば、[1,1,1,1,1,1]で数値3を作成するには、次の5つの方法があります.で与えられた数字は20個未満です. 各数字は50より大きい自然数である. 目標は自然数が1000より大きいことです. 再帰DFSを使用した.ちょっとバカみたいで、
チェック式の答えは、リストの長さ+1で行うべき最後の数または減算結果を報告することができます!
私のようにdfs()関数を構築して解く人もたくさんいます.
因子は4つ使わざるを得ないようです.
ゲゼ草を持ってきました.
solution()関数自体をdfs()と書きました.
引き裂いて...
もし私もたくさん解けば、こうなります.
問題の説明
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
せいげんじょうけん
説明する
def dfs(numbers, i, res, ans):
if i == len(numbers):
return 1 if res == ans else 0
return dfs(numbers, i+1, res + numbers[i], ans) + dfs(numbers, i+1, res - numbers[i], ans)
def solution(numbers, target):
answer = dfs(numbers, 0, 0, target)
return answer
基板部分のチェックを開始したときにエラーが発生しました.if i == len(numbers) - 1: # 리스트의 길이만큼 돌았을 때 (마지막수 연산 안했는데 바로 결과 체크함 ㅜ)
return 1 if res == ans else 0
このままチェック式の答えは、リストの長さ+1で行うべき最後の数または減算結果を報告することができます!
他人の解答
私のようにdfs()関数を構築して解く人もたくさんいます.
因子は4つ使わざるを得ないようです.
ゲゼ草を持ってきました.
solution()関数自体をdfs()と書きました.
引き裂いて...
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])
わあ本当に...どうしてそんな考えがあるの?もし私もたくさん解けば、こうなります.
Reference
この問題について([プログラマ]ターゲット番号), 我々は、より多くの情報をここで見つけました https://velog.io/@kyy00n/programmers-타겟-넘버テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol