Given an array of integers nums
and a positive integer k
, find whether it's possible to divide this array into k
non-empty subsets whose sums are all equal.
Example 1:
Input: nums = [4, 3, 2, 3, 5, 2, 1], k = 4 Output: True Explanation: It's possible to divide it into 4 subsets (5), (1, 4), (2,3), (2,3) with equal sums.
Note:
1 <= k <= len(nums) <= 16
.0 < nums[i] < 10000
.
这个题经历了多次超时终于A了。。。。。。。起因是我开始的基本法就是错的。放上代码:
class Solution(object):
def canPartitionKSubsets(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
nums = sorted(nums,reverse = True)
if sum(nums)%k !=0 or max(nums) > sum(nums)/k:
return False
else:
visited = [False for _ in range(len(nums))]
cur_sum = sum(nums)/k
return self.help(visited,cur_sum,sum(nums)/k,k,nums,0)
def help(self,visited,cur_sum,target,k,nums,pos):
if k == 1:
return True
if cur_sum == 0:
return self.help(visited,target,target,k-1,nums,0)
for i in range(pos,len(nums)):
if not visited[i] and cur_sum>=nums[i]:
visited[i] = True
if self.help(visited,cur_sum-nums[i],target,k,nums,pos+1):
return True
visited[i] = False
return False