算法分析与设计第十一周:416. Partition Equal Subset Sum

来源:互联网 发布:基本编程 编辑:程序博客网 时间:2024/06/11 20:56

思路:
1.对数组进行排序并取得数组的总和
2.从大到小对数组进行筛选
3.只要有一种可行方案即返回True

class Solution(object):    def canPartition(self, nums):        if len(nums) <= 1:            return False        sum1 = sum(nums)        nums.sort()        #若数组中最大值大于数组总和值的一半,则直接返回False        if sum1 % 2 == 1 or nums[-1] > (sum1 >> 1):            return False        def rec(nums, size, val):            if val == 0:                return True            yes = False            #遍历搜索各种可能的组合            for i in range(size - 1, -1, -1):                if nums[i] <= val:                     yes |= rec(nums[0:i] + nums[i + 1:], size - 1, val - nums[i])                     if yes:                         return True            return yes        #因为要将数组分为等值的两部分,所以传入数组总和的一半值        return rec(nums, len(nums), sum1 >> 1)

不加中文注释时的代码效率:
不加中文注释时的代码效率

0 0