494. Target Sum

선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

Вам дан 배열 целых чисел nums и 정수 target.

Вы хотите создать выражение из nums, добавляя один из символов '+' или '-' перед каждым numberм в nums, а затем объединяя все числа.

На예제, если nums = [2, 1], вы можете добавить '+' перед 2 и '-' перед 1, а затем объединить их, чтобы получить выражение "+2-1".

return количество различных выражений, которые можно построить и которые оцениваются в target.

예제:

Input: nums = [1,1,1,1,1], target = 3

Output: 5

Explanation: There are 5 ways to assign symbols to make the sum of nums be target 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 + 1 + 1 + 1 - 1 = 3

C# 해법

매칭됨/원본
public class Solution {
    private int count = 0;
    public int FindTargetSumWays(int[] nums, int S) {
        Calculate(nums, 0, 0, S);
        return count;
    }
    private void Calculate(int[] nums, int i, int sum, int S) {
        if (i == nums.Length) {
            if (sum == S) {
                count++;
            }
        } else {
            Calculate(nums, i + 1, sum + nums[i], S);
            Calculate(nums, i + 1, sum - nums[i], S);
        }
    }
}

C++ 해법

자동 초안, 제출 전 검토
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    private int count = 0;
    public int FindTargetSumWays(vector<int>& nums, int S) {
        Calculate(nums, 0, 0, S);
        return count;
    }
    private void Calculate(vector<int>& nums, int i, int sum, int S) {
        if (i == nums.size()) {
            if (sum == S) {
                count++;
            }
        } else {
            Calculate(nums, i + 1, sum + nums[i], S);
            Calculate(nums, i + 1, sum - nums[i], S);
        }
    }
}

Java 해법

매칭됨/원본
public class Solution {
    int count = 0;
    
    public int findTargetSumWays(int[] nums, int S) {
        calculate(nums, 0, 0, S);
        return count;
    }
    
    public void calculate(int[] nums, int i, int sum, int S) {
        if (i == nums.length) {
            if (sum == S) {
                count++;
            }
        } else {
            calculate(nums, i + 1, sum + nums[i], S);
            calculate(nums, i + 1, sum - nums[i], S);
        }
    }
}

JavaScript 해법

매칭됨/원본
class Solution {
    constructor() {
        this.count = 0;
    }

    findTargetSumWays(nums, S) {
        this.calculate(nums, 0, 0, S);
        return this.count;
    }

    calculate(nums, i, sum, S) {
        if (i === nums.length) {
            if (sum === S) {
                this.count++;
            }
        } else {
            this.calculate(nums, i + 1, sum + nums[i], S);
            this.calculate(nums, i + 1, sum - nums[i], S);
        }
    }
}

Python 해법

매칭됨/원본
class Solution:
    def __init__(self):
        self.count = 0

    def findTargetSumWays(self, nums: List[int], S: int) -> int:
        self.calculate(nums, 0, 0, S)
        return self.count

    def calculate(self, nums: List[int], i: int, sum: int, S: int):
        if i == len(nums):
            if sum == S:
                self.count += 1
        else:
            self.calculate(nums, i + 1, sum + nums[i], S)
            self.calculate(nums, i + 1, sum - nums[i], S)

Go 해법

매칭됨/원본
type Solution struct {
    count int
}

func (s *Solution) findTargetSumWays(nums []int, S int) int {
    s.count = 0
    s.calculate(nums, 0, 0, S)
    return s.count
}

func (s *Solution) calculate(nums []int, i int, sum int, S int) {
    if i == len(nums) {
        if sum == S {
            s.count++
        }
    } else {
        s.calculate(nums, i+1, sum+nums[i], S)
        s.calculate(nums, i+1, sum-nums[i], S)
    }
}

Algorithm

Инициализация и вызов рекурсивной функции

Создайте переменную для хранения количества решений (count). Вызовите рекурсивную функцию calculate с начальными параметрами (nums, начальный индекс 0, начальная сумма 0, и target).

Рекурсивная функция calculate

Если текущий индекс равен длине 배열а, проверьте, равна ли текущая сумма значению target. Если да, увеличьте счетчик решений. В противном случае, вызовите функцию рекурсивно дважды: добавляя и вычитая текущее значение из суммы.

Возврат результата

После завершения всех рекурсивных вызовов return значение счетчика решений.

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.