给定一个整数数组和一个整数k,您需要找到总和等于k的连续子数组的总数。
尝试解决leetcode之外的问题,不确定确切的位置以及如何找到正确的解决方案。在nums = [0,0,0,0,0,0,0,0,0,0]和k = 0的情况下失败,当实际上应该为55时,我得到的答案是10
class Solution(object):
def subarraySum(self, nums, k):
count = 0
for i in range(0, len(nums)):
count += self.driver(nums, k, nums[i], i+1)
return count
def driver(self, nums, target, curr, index):
if curr == target:
return 1
else:
for i in range(index, len(nums)):
return self.driver(nums, target, curr + nums[i], i+1)
return 0
答案 0 :(得分:0)
使用itertools的累加功能,会更容易。
from itertools import accumulate
def subarraySum(a,k):
return sum( list(accumulate(a[i:])).count(k) for i in range(len(a)) )
print(subarraySum([0,0,0,0,0,0,0,0,0,0],0)) # 55
只要让accumulate()进行从数组中每个位置到末尾的累加和,并计算它达到所需值的次数。这将涵盖零以及负数的情况。
如果不允许使用导入的模块,则可以编写自己的累积迭代器:
def accumulate(a):
s = 0
for v in a: s+=v; yield s