程序找到了许多方法来排列符号以获取Python中的目标?
假设我们有一个称为nums的非负数的列表,并且还有一个整数目标。我们必须找到以数字表示+和-的方式数目,以使表达式等于目标。
因此,如果输入像nums=[2,3,3,3,2]target=9,那么输出将是2,因为我们可以拥有-2+3+3+3+2和2+3+3+3–2。
为了解决这个问题,我们将按照以下步骤操作:
s:=所有数字的总和
如果(s+目标)mod2与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