程序找到了许多方法来排列符号以获取Python中的目标?

假设我们有一个称为nums的非负数的列表,并且还有一个整数目标。我们必须找到以数字表示+和-的方式数目,以使表达式等于目标。

因此,如果输入像nums = [2,3,3,3,2] target = 9,那么输出将是2,因为我们可以拥有-2 + 3 + 3 + 3 + 2和2 + 3 + 3 + 3 – 2。

为了解决这个问题,我们将按照以下步骤操作:

  • s:=所有数字的总和

  • 如果(s +目标)mod 2与0不相同或target> s,则

    • 返回0

  • W:=(s +目标)/ 2的商

  • dp1:=大小(W + 1)的列表,并用0填充

  • dp1 [0]:= 1

  • dp2:=大小(W + 1)并填充0的列表

  • 对于范围从0到nums的i,执行

    • dp1 [j]:= dp1 [j] + dp2 [j]

    • dp2 [j]:= 0

    • 如果j> = nums [i],则

    • dp2 [j]:= dp2 [j] + dp1 [j-nums [i]]

    • 对于0到W + 1范围内的j

    • 对于0到W + 1范围内的j

    • 返回dp1的最后一个元素

    让我们看下面的实现以更好地理解:

    示例

    class Solution:
       def solve(self, nums, target):
          s = sum(nums)
          if (s + target) % 2 != 0 or target > s:
             return 0
          W = (s + target) // 2
          dp1 = [0] * (W + 1)
          dp1[0] = 1
          dp2 = [0] * (W + 1)
          for i in range(len(nums)):
             for j in range(W + 1):
                if j >= nums[i]:
                   dp2[j] += dp1[j - nums[i]]
                for j in range(W + 1):
                   dp1[j] += dp2[j]
                   dp2[j] = 0
             return dp1[-1]
    
    ob = Solution()nums = [2, 3, 3, 3, 2]
    target = 9
    print(ob.solve(nums, target))

    输入值

    [2, 3, 3, 3, 2], 9

    输出结果

    2
    猜你喜欢