假设我们有一个称为nums的数字列表,我们必须检查是否可以将nums分为两组,两组中的元素之和是相同的。
因此,如果输入像nums = [2,3,6,5],那么输出将为True,因为我们可以将组划分为:[2,6]和[3,5]。
为了解决这个问题,我们将按照以下步骤
总计:=所有元素的总和
如果总数是奇数,则
返回False
一半:=总数的整数部分/ 2
dp:=大小为一半+ 1并以false填充的列表
dp [0]:= true
对于以num为单位的每个num
如果i> = num,则
dp [i]:= dp [i]或dp [i-num]
因为我的范围是0的一半,所以减少1,
返回dp [一半]
class Solution: def solve(self, nums): total = sum(nums) if total & 1: return False half = total // 2 dp = [True] + [False] * half for num in nums: for i in range(half, 0, -1): if i >= num: dp[i] |= dp[i - num] return dp[half] ob = Solution()nums = [2, 3, 6, 5] print(ob.solve(nums))
[2, 3, 6, 5]
输出结果
True