[programmers]level 2-ターゲット番号(lang:swift)


ターゲット番号
問題の説明
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以下の自然数です.
I/O例
numbers	target	return
[1, 1, 1, 1, 1]	3	5
[4, 1, 2, 1]	4	2
I/O例説明
I/O例#1
問題の例を以下に示します.
I/O例#2
+4+1-2+1 = 4
+4-1+2-1 = 4
2つの方法があるため、2を返します.
================================================================
  • 私が書いたコード
  • import Foundation
    
    /*
     [1, 1, 1, 1, 1]    3    5
     [4, 1, 2, 1]    4    2
     */
    
    func subCount(_ numbers:[Int], _ target: Int) -> Int{
        var tempTarget: Int = target
        var tempNumbers: [Int] = numbers
        var count = 0
        
        if numbers.isEmpty {
            if target == 0 {
                return 1
            } else {
                return 0
            }
        }
        
        tempTarget -= tempNumbers[0]
        tempNumbers.remove(at: 0)
        count += subCount(tempNumbers, tempTarget)
        
        tempTarget = target
        tempNumbers = numbers
        tempTarget += tempNumbers[0]
        tempNumbers.remove(at: 0)
        count += subCount(tempNumbers, tempTarget)
        
        return count
    }
    
    func solution(_ numbers:[Int], _ target:Int) -> Int {
        return subCount(numbers, target)
    }