[アルゴリズム]プログラマ-ターゲット番号

4453 ワード

https://programmers.co.kr/learn/courses/30/lessons/43165
問題の説明
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
使用可能な数値の配列番号、ターゲット番号のターゲットをパラメータとして指定したときに、適切に数値を加算して減算して、ターゲット番号を作成する方法の数を返します.

解答方法
1.ランダムに加減を実現する方法を考えます!
2.再帰関数がプラスの場合、すべてのマイナス記号が呼び出されます.
3.getAnswer関数(getAnswer関数以外)を2回呼び出す理由は、0番目のindex値が負の場合も考慮するからです!
function solution(numbers, target) {
    let count = 0;
  
    function getAnswer(cur, isPositive, index){
        isPositive ? cur+=numbers[index] : cur-=numbers[index];
        if(index === numbers.length-1){
            if(cur === target){
                count++;
            }
            return;
        }
        getAnswer(cur, true, index+1);
        getAnswer(cur, false, index+1);

    }    
    
    getAnswer(0, true, 0);
    getAnswer(0, false, 0);
    
    return count;
}