给你一个 只包含正整数 的 非空 数组 nums
。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
示例 1:
输入:nums = [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] 和 [11] 。
示例 2:
输入:nums = [1,2,3,5] 输出:false 解释:数组不能分割成两个元素和相等的子集。
class Solution:
def canPartition(self, nums: List[int]) -> bool:
dp=[0]*10001
_sum=0
for num in nums:
_sum+=num
if _sum%2==1:
return False
target=_sum//2
for num in nums :
for j in range (target,num-1,-1):
dp[j]=max(dp[j],dp[j-num]+num)
if target==dp[target]:
return True
return False
注意一点:
该问题类似背包问题,都是
for num in nums :
for j in range (target,num-1,-1):
dp[j]=max(dp[j],dp[j-num]+num)
利用这一遍历的方法先遍历物品在遍历背包容量