描述
给一 只含有正整数 的 非空 数组, 找到这个数组是否可以划分为 两个 元素和相等的子集。
所有数组元素不超过100.
数组大小不超过200.
样例 1:
输入: nums = [1, 5, 11, 5],
输出: true
解释:
2个子集: [1, 5, 5], [11]
样例 2:
输入: nums = [1, 2, 3, 9],
输出: false
解题思路
等价与背包问题,能否背到总价值的一半。 01背包即可。
源代码
class Solution(object):
def canPartition(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
length = len(nums)
mySum = sum(nums);
if mySum % 2 == 1:
return False
mySum /= 2
dp = [False for x in range(20000)]
dp[0] = True
for i in range(0,length):
for j in range(mySum, nums[i] - 1, -1):
dp[j] |= dp[j - nums[i]]
return dp[mySum]