-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblem416.py
More file actions
63 lines (37 loc) · 1.32 KB
/
problem416.py
File metadata and controls
63 lines (37 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
'''
416. Partition Equal Subset Sum
Medium
Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.
Note:
Each of the array element will not exceed 100.
The array size will not exceed 200.
Example 1:
Input: [1, 5, 11, 5]
Output: true
Explanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:
Input: [1, 2, 3, 5]
Output: false
Explanation: The array cannot be partitioned into equal sum subsets
Solution:
DP solution.
Define if the every number before the half, and then determine the num can be formated by the selection
of the nums list.
What we really need is the last element of the dp list.
Double for loop, update the all dp list on the given current num. Just use the dp[i] and dp[i-num]
on a OR operation. The bottom edge is the current num, in the list iteration operation, when the
second parameter is n, it would stop at n+1.
All the way from the half, to the current number's boarder.
'''
class Solution(object):
def canPartition(self, nums):
all_sums = sum(nums)
if all_sums % 2 == 1:
return False
half = all_sums / 2
dp = [False] * (half + 1)
dp[0] = True
for num in nums:
for i in range(half, num-1, -1):
dp[i] = dp[i] or dp[i-num]
return dp[-1]