返回子数组和为0(Python)

给定一个数组,写一个函数返回其中全部子数组其和为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]])

 

猜你喜欢

转载自blog.csdn.net/Manson_Wang/article/details/82347611
今日推荐