class Solution(object):
def canPartition(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
sum = 0
for n in nums:
sum += n
# guard phase
# 提前判断是否有必要继续下去
if sum % 2 == 1:
return False
target_num = sum // 2
# 01 背包问题
dp = [False] * (target_num + 1)
# 初始化解释
# 针对二维情况,
# dp[i][0] 表示的是使用前i个数字是否可以组成一个{}空集
# 答案是肯定的
dp[0] = True
for i in range(len(nums)):
for j in range(target_num, -1, -1):
# 等号的含义, 如果不取等号, 那么就是说j不能取nums[i]中的任意一个.
# 而实际是我们要取该数
if j>=nums[i]:
dp[j] = dp[j-nums[i]] or dp[j]
return dp[-1]
416. 分割等和子集
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 京东2018校招求神...