给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
注意:
每个数组中的元素不会超过 100
数组的大小不会超过 200
输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11].
回溯法
class Solution:
def canPartition(self, nums: List[int]) -> bool:
n = len(nums)
s = sum(nums)
if s%2 ==1:
return False
else:
s = s // 2
@lru_cache(None) #缓存优化器,加快运算速度
def find(num,i):
if num==0 and i<=n:
return True
if num<0:
return False
if i==n:
return False
return find(num-nums[i],i+1) or find(num,i+1)
return find(s,0)