Skip to content

Commit 70822ce

Browse files
authored
Create Partition to K Equal Sum Subsets.py
1 parent f934b36 commit 70822ce

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

Partition to K Equal Sum Subsets.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
'''
2+
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.
3+
4+
5+
6+
Example 1:
7+
8+
Input: nums = [4, 3, 2, 3, 5, 2, 1], k = 4
9+
Output: True
10+
Explanation: It's possible to divide it into 4 subsets (5), (1, 4), (2,3), (2,3) with equal sums.
11+
12+
13+
Note:
14+
15+
1 <= k <= len(nums) <= 16.
16+
0 < nums[i] < 10000.
17+
18+
'''
19+
20+
class Solution:
21+
def canPartitionKSubsets(self, nums: List[int], k: int) -> bool:
22+
sum_nums = sum(nums)
23+
if sum_nums % k != 0:
24+
return False
25+
target = sum_nums // k
26+
visited = [False for i in range(len(nums))]
27+
return self.valid(nums=nums,
28+
visited=visited,
29+
start=0,
30+
group=k,
31+
tmp_sum=0,
32+
target_sum=target)
33+
34+
def valid(self, nums: List[int], visited: List[bool], start: int, group: int, tmp_sum: int, target_sum: int):
35+
if group == 1:
36+
return True
37+
if tmp_sum == target_sum:
38+
return self.valid(nums=nums,
39+
visited=visited,
40+
start=0,
41+
group=group-1,
42+
tmp_sum=0,
43+
target_sum=target_sum)
44+
45+
for i in range(start, len(nums)):
46+
if visited[i]:
47+
continue
48+
49+
visited[i] = True
50+
if self.valid(nums=nums,
51+
visited=visited,
52+
start=i+1,
53+
group=group,
54+
tmp_sum=tmp_sum+nums[i],
55+
target_sum=target_sum):
56+
return True
57+
visited[i] = False
58+
59+
return False

0 commit comments

Comments
 (0)