Target Sum
Posted 唐僧洗发爱飘柔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Target Sum相关的知识,希望对你有一定的参考价值。
这道题为中等题
题目:
思路:
1、我最开始的思路:利用DFS,把它当成一个二叉树,但是结果超时,很疑惑,在网上查找,好像是没有进行尾递归优化,具体的尾递归概念大家可以百度一下
2、还是使用DFS,但是利用字典存储中间值
3、利用DP,利用两个字典,字典的键为一个数,键值表示为到达该数有多少种途径,每次循环之后就要用另一个字典进行覆盖
代码:
我的超时代码:
1 class Solution(object): 2 def findTargetSumWays(self, nums, S): 3 """ 4 :type nums: List[int] 5 :type S: int 6 :rtype: int 7 """ 8 return self.dfs(nums, S, 0, 0, len(nums)) 9 10 def dfs(self, nums, S, index, total, list_long): 11 if index >= list_long: 12 if total == S: return 1 13 else: return 0 14 return self.dfs(nums, S, index+1, total+nums[index], list_long) + self.dfs(nums, S, index+1, total-nums[index], list_long)
另一种DFS代码(AC):
1 class Solution(object): 2 def findTargetSumWays(self, nums, S): 3 """ 4 :type nums: List[int] 5 :type S: int 6 :rtype: int 7 """ 8 def findTarget(i, s): 9 if (i, s) not in cache: 10 r = 0 11 if i == len(nums): 12 if s == 0: 13 r = 1 14 else: 15 r = findTarget(i+1, s-nums[i]) + findTarget(i+1, s+nums[i]) 16 cache[(i, s)] = r 17 return cache[(i, s)] 18 19 cache = {} 20 return findTarget(0, S)
DF代码(AC):
1 class Solution(object): 2 def findTargetSumWays(self, nums, S): 3 from collections import defaultdict 4 memo = {0: 1} 5 for x in nums: 6 m = defaultdict(int) 7 for s, n in memo.iteritems(): 8 m[s + x] += n 9 m[s - x] += n 10 memo = m 11 return memo[S]
以上是关于Target Sum的主要内容,如果未能解决你的问题,请参考以下文章
解决移动端报错:Unable to preventDefault inside passive event listener due to target being treated as……(代码片段