给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
//看起来风轻云淡的一道题,实际上花了我三个小时时间。
func canPartition(nums []int) bool {
sum:=0
for _,num:= range nums{sum +=num}// 求和
if sum %2 ==1{ return false}//判断奇偶
target := sum/2
dp :=make([]int, target +1)//dp初始化
for _,num:=range nums{//遍历物品
for j:=target;j>=num;j--{//倒序 01背包
if dp[j] < dp[j-num]+num{
dp[j] = dp[j-num]+num
}
}
}
return dp[target] == target //判断dp过程中是否存在有target这个和 即可
}