LeetCode 494.目标和(中等)
程序员文章站
2024-03-15 09:00:47
...
题目描述:
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。
对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。
返回可以使最终数组和为目标数 S 的所有添加符号的方法数。
示例 1:
输入: nums: [1, 1, 1, 1, 1], S: 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
一共有5种方法让最终目标和为3。
实现:
#思路:DFS+记忆化+剪枝
class Solution:
def findTargetSumWays(self, nums: List[int], S: int) -> int:
if not nums:return 0
dp={}
res=self.helper(nums,S,0,0,dp)
return res
def helper(self,nums,S,i,sums,dp):
if i<len(nums) and (i,sums) not in dp:
cnt1=self.helper(nums,S,i+1,sums+nums[i],dp) #左叶子节点
cnt2=self.helper(nums,S,i+1,sums-nums[i],dp) #右叶子节点
dp[(i,sums)]=cnt1+cnt2
return dp.get((i,sums),S==sums)
推荐阅读
-
LeetCode 494.目标和(中等)
-
LeetCode - 494. 目标和
-
leetcode 325.和等于 k 的最长子数组长度(中等)
-
Leetcode: Topic 1 给定一个整数数组 nums 和一个目标值 target....
-
LeetCode 1 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
leetcode:求两数之和,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
Leetcode打卡8:题号1:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案
-
LeetCode1.两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,返回数组下标。假设每种输入只对应一个答案。但数组中同一个元素不能使用两遍
-
Leetcode——给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。(java语言)
-
LeetCode [Python]1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。