416 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等
def canPartition(nums:'List[int]')->bool:
total_sum=sum(nums)
if total_sum%2!=0:
return False
target_sum=total_sum//2
dp=[[False]*(target_sum+1) for _ in range(len(nums)+1)]
for i in range(len(nums)+1):
dp[i][0]=True
# dp[i][j]表示从前i个元素中选取元素,相加刚好能组成j
for i in range(1,len(nums)+1):
for j in range(1,target_sum+1):
if j<nums[i-1]
dp[i][j]=dp[i-1][j]
else:
dp[i][j]=dp[i-1][j] or dp[i-1][j-nums[i-1]]
return dp[len(nums)][target_sum]
def canParition(nums):
total_sum=sum(nums)
if total_sum%2!=0:
return False
target_sum=total/2
dp=[False]*(target_sum+1)
dp[0]=True
for num in nums:
for i in range(target_sum,num-1,-1):
dp[i]=dp[i] or dp[i-num]
return dp[target_num]
+ a=0 or i 当等号后面第一个元素为True,a=第一个否则a=第二个
+ 没搞懂,待解决