美文网首页LeetCode
416. 分割等和子集

416. 分割等和子集

作者: cptn3m0 | 来源:发表于2019-03-10 15:40 被阅读1次
class Solution(object):
    def canPartition(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        # guard phase 
        # 处理异常情况
        sum = 0
        for n in nums:
            sum+=n
        if sum%2==1:
            return False
        
        target_num = sum//2
        
        
        print target_num
        dp =  [[False]*(target_num+1) for _ in range(len(nums)+1)]
        
        # init
        # 使用前 i 个元素组成空集,是 ok 的 TRUE
        # dp[i][0] 表示的是上面提示的意思
        
        for i in range(len(nums)+1):
            dp[i][0] = True
        
        for i in range(1, len(nums)+1):
            for j in range(1, target_num+1):
                if j>= nums[i-1]:
                    dp[i][j] = dp[i-1][j] or dp[i-1][j-nums[i-1]]
                else:
                    dp[i][j] = dp[i-1][j]
        return dp[-1][-1]
    

相关文章

网友评论

    本文标题:416. 分割等和子集

    本文链接:https://www.haomeiwen.com/subject/esoupqtx.html