File tree

5 files changed

+96
-0
lines changed

5 files changed

+96
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution:
2+
def canPartition(self, nums):
3+
s = sum(nums)
4+
if (s % 2 != 0): return False
5+
6+
n = len(nums)
7+
s = s // 2
8+
9+
dp = [[False] * (s+1) for _ in range(n)]
10+
11+
for i in range(n):
12+
dp[i][0] = True
13+
14+
for j in range(1, s+1):
15+
dp[0][j] = nums[0] == j
16+
17+
for i in range(1, n):
18+
for j in range(1, s+1):
19+
if dp[i-1][j]:
20+
dp[i][j] = dp[i-1][j]
21+
elif j >= nums[i]:
22+
dp[i][j] = dp[i-1][j-nums[i]]
23+
24+
return dp[n-1][s]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# https://youtu.be/MqYLmIzl8sQ
2+
3+
class Solution:
4+
def countSubsetsWithSum(self, nums, target):
5+
n = len(nums)
6+
dp = [[None] * (target + 1) for _ in range(n+1)]
7+
8+
for i in range(n+1):
9+
dp[i][0] = 1
10+
11+
for j in range(1, target+1):
12+
dp[0][j] = 0
13+
14+
for i in range(1, n+1):
15+
for j in range(1, target+1):
16+
if nums[i-1] > j:
17+
dp[i][j] = dp[i-1][j]
18+
elif nums[i-1] <= j:
19+
dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i-1]]
20+
21+
return dp[n][target]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# https://youtu.be/FB0KUhsxXGY
2+
3+
class Solution:
4+
def minimumSubsetSum(self, nums):
5+
total = sum(nums)
6+
s = total // 2
7+
n = len(nums)
8+
dp = [[False] * (s+1) for _ in range(n)]
9+
10+
for i in range(n):
11+
dp[i][0] = True
12+
13+
for j in range(1, s+1):
14+
dp[0][j] = nums[0] == j
15+
16+
for i in range(1, n):
17+
for j in range(1, s+1):
18+
if dp[i-1][j]:
19+
dp[i][j] = dp[i-1][j]
20+
elif j >= nums[i]:
21+
dp[i][j] = dp[i-1][j-nums[i]]
22+
23+
for j in range(s, -1, -1):
24+
if dp[n-1][j]:
25+
# ans = abs(sum1 - sum2); sum1 = j; sum2 = total - j
26+
return abs(j - (total - j))
Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution:
2+
def delNodes(self, root, to_delete):
3+
self.nodes = []
4+
self.toDelete = set(to_delete)
5+
self.delNodesRec(root)
6+
7+
if not root.val in self.toDelete:
8+
self.nodes.append(root)
9+
10+
return self.nodes
11+
12+
def delNodesRec(self, node):
13+
if node is None: return None
14+
15+
node.left = self.delNodesRec(node.left)
16+
node.right = self.delNodesRec(node.right)
17+
18+
if node.val in self.toDelete:
19+
if node.left is not None:
20+
self.nodes.append(node.left)
21+
if node.right is not None:
22+
self.nodes.append(node.right)
23+
return None
24+
25+
return node

0 commit comments

Comments
 (0)