LeetCode 494. 目标和

2022-07-05  本文已影响0人  草莓桃子酪酪
题目

给你一个整数数组 nums 和一个整数 target。向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个表达式:

返回可以通过上述方法构造的、运算结果等于 target 的不同表达式的数目。

例:
输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 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

方法:动态规划

按照之前的思路,应该将数组 nums 分割成两部分,一部分作为减数,另一部分作为被减数,两组元素相减得到 target

class Solution(object):
    def findTargetSumWays(self, nums, target):
        sumValue = sum(nums)
        if abs(target) > sumValue or (sumValue + target) % 2 == 1:
            return 0
        bagSize = (sumValue + target) // 2
        dp = [0] * (bagSize + 1)
        dp[0] = 1
        for i in range(len(nums)):
            for j in range(bagSize, nums[i] - 1, -1):
                dp[j] += dp[j-nums[i]]
        return dp[bagSize]

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

参考

代码相关:https://programmercarl.com/0494.%E7%9B%AE%E6%A0%87%E5%92%8C.html

上一篇 下一篇

猜你喜欢

热点阅读