dp,先判断整个数组的和 s 是否能被 2 整除,若不可以直接返回 False 若可以,则设置 dp 数组,确定状态转移方程, 该问题类似 0-1 背包 dp 的长度 为 s // 2, 状态转移时,当前状态只能从其大于nums[i] 的状态转移得到

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return bool布尔型
#
class Solution:
    def partition(self , nums: List[int]) -> bool:
        # write code here
        s = sum(nums)
        if s % 2: return False
        s = s // 2
        dp = [False for _ in range(s + 1)]
        dp[0] = True
        for i in range(len(nums)):
            for j in range(s, nums[i] - 1, -1):
                dp[j] = dp[j] or dp[j - nums[i]]
        return dp[-1]