刷题笔记动态规划Leetcode416.分割等和子集
赵海波
416. 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums
。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
示例 1:
1 2 3
| >输入:nums = [1,5,11,5] >输出:true >解释:数组可以分割成 [1, 5, 5] 和 [11] 。
|
示例 2:
1 2 3
| >输入:nums = [1,2,3,5] >输出:false >解释:数组不能分割成两个元素和相等的子集。
|
同,暂时还没看懂,先贴代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution(object): def canPartition(self, nums):
total = sum(nums) if total % 2 == 1: return False target = total // 2 if max(nums) > target: return False
dp = [False] * (target+1) dp[0] = True
for num in nums: dp2 = [False] * (target+1) dp2[0] = True for j in range(target+1): if j < num: dp2[j] = dp[j] else: dp2[j] = dp[j] | dp[j-num] dp = dp2 return dp[target]
|