[プログラマー][DFS][JS]ターゲット番号


質問する


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
使用可能な数値の配列番号、ターゲット番号のターゲットをパラメータとして指定したときに、適切に数値を加算して減算して、ターゲット番号を作成する方法の数を返します.

せいげんじょうけん


与えられた数字の個数は2個または20個以上である.
各数字は1または50以下の自然数です.
ターゲット番号が1または1000以下の自然数です.

に答える

function solution(numbers, target) {
  let answer = 0;

  DFS(0,0)

  function DFS(level, sum) {
  	if(level === numbers.length) {
      if(sum === target) {
        answer += 1;
      }
      return;
    } 
    DFS(level + 1, sum + numbers[level])
    DFS(level + 1, sum - numbers[level])   
  }
  return answer;
  
}

solution([1, 1, 1, 1, 1], 3)

Reference

  • https://programmers.co.kr/learn/courses/30/lessons/43165