您的位置:首页 > 其它

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

2017-05-01 23:30 417 查看
思路:

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)


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: