给定一个数组,写一个函数返回其中全部子数组其和为0,如果没有返回NULL。如:findzero([4,2,-5,1,2,-3]) = [2,-5,1,2]。
代码思路:
本题采用递归算法来实现。
代码实现:
class Solution(object):
def findZero(self, nums, target):
#给数组排序(由小到大)
nums.sort()从
#存储结果数组
self.res = []
#初始递归条件
self.DFS(nums, target, 0, [])
return self.res
def DFS(self, nums, target, i, val_list):
if (target == 0) and (val_list != []) and (val_list not in self.res):
self.res.append(val_list)
#当i等于len(nums)是递归结束
#循环的目的是保证可以只加一个元素,也可以加多个个元素
for i in range(i, len(nums)):
#优化:因为是从小大排序,且采用的是逼近目标值得办法(target-nums[i])
#所以如果nums[i]已经大于>target了,i后面的元素就不需要判断了
if nums[i] > target:
return
#利用target-nums[i]逼近,当此值等于0时,得到的数组就是目标数组
#target的值发生变化后进入下一次递归,同样的i也需要后移一个距离
#递归开始
self.DFS(nums, target-nums[i], i+1, val_list+[nums[i]])