https://leetcode.com/problems/partition-equal-subset-sum/
题解
子数组和问题,目标和为sum(nums)/2,思路类似https://blog.youkuaiyun.com/scut_salmon/article/details/89281406
子数组和问题,若暴力求解,枚举数组每个元素是否加入,复杂度为2^n;考虑动态规划方法,即根据前n-1个数的和情况,推导前n个数的和情况。
令dp[i][j]表示前i个数和为j的子数组存在情况,则得到如下动态规划公式:
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]
AC代码如下:
class Solution(object):
def canPartition(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
target = sum(nums