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

せいげんじょうけん

  • で与えられた数字は20個未満です.
  • 各数字
  • は50より大きい自然数である.
  • 目標は自然数が1000より大きいことです.

  • Code

    class Solution {
        static int answer=0;
        static int targett=0;
        public int solution(int[] numbers, int target) {
            
            targett=target;
            DFS(numbers, 0, 0);
            return answer;
        }
        
        public void DFS(int[] num, int idx, int sum)
        {
            if(idx==num.length)
            {
                if(sum==targett)
                    answer++;
                return;
            }
            
            sum+=num[idx];
            DFS(num, idx+1, sum);
            sum-=num[idx];
            num[idx]*=(-1);
            sum+=num[idx];
            DFS(num, idx+1, sum);
        }
    }