Skip to content

Commit 2d681ff

Browse files
committed
😓 some pending problems that require updates...
1 parent b45c05b commit 2d681ff

File tree

3 files changed

+159
-0
lines changed

3 files changed

+159
-0
lines changed

ProblemSolving/bulbSwitch/bulb.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Pending...
2+
3+
class Solution(object):
4+
def bulbSwitch(self, n):
5+
"""
6+
:type n: int
7+
:rtype: int
8+
"""
9+
10+
# Time Limit Exceeded Solution
11+
import collections
12+
13+
# Lets assume 1 in ON and 0 is OFF
14+
# * First steps (1st iteration) also includes constructing the dictionary
15+
# * So, all are ON
16+
switches = collections.Counter(range(1,n+1))
17+
18+
for i in range(2, n+1):
19+
if i == 2:
20+
for k in range(i, n+1, i):
21+
switches[k] = 0
22+
else:
23+
for k in range(i, n+1, i):
24+
switches[k] = switches[k]^1
25+
26+
return sum(switches.values())
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Pending...
2+
3+
# Definition for a binary tree node.
4+
# class TreeNode(object):
5+
# def __init__(self, x):
6+
# self.val = x
7+
# self.left = None
8+
# self.right = None
9+
10+
# Logic:
11+
# * Given a root,Lets use any one traversal technique (pre, post or in order) or level order and obtain a string (or any technique to traverse)
12+
# * Given a string, Lets reverse the corresponding order we select and reconstruct the tree
13+
# * Remember we do it state less so we dont store any variables
14+
15+
class Codec:
16+
17+
def serialize(self, root):
18+
"""Encodes a tree to a single string.
19+
20+
:type root: TreeNode
21+
:rtype: str
22+
"""
23+
24+
def pre_order_traverse(node, encode):
25+
26+
if not node:
27+
return
28+
29+
if node.left and node.right:
30+
encode += "/"+ str(node.val) + "L" + str(node.left.val) + "R" + str(node.right.val)
31+
elif node.left:
32+
encode += "/"+ str(node.val) + "L" + str(node.left.val)
33+
elif node.right:
34+
encode += "/"+ str(node.val) + "R" + str(node.right.val)
35+
elif node:
36+
encode += "/"+str(node.val)
37+
38+
pre_order_traverse(node.left, encode)
39+
pre_order_traverse(node.right, encode)
40+
41+
return encode
42+
43+
return pre_order_traverse(root, "")
44+
45+
46+
def deserialize(self, data):
47+
"""Decodes your encoded data to tree.
48+
49+
:type data: str
50+
:rtype: TreeNode
51+
"""
52+
53+
def reverse_traversal_to_bst(node, sequence, root):
54+
55+
if sequence and node == "":
56+
subtree = list(sequence.pop(0))
57+
root = node = TreeNode(int(subtree.pop(0)))
58+
if subtree and subtree[0] == "L":
59+
subtree.pop(0)
60+
node.left = TreeNode(int(subtree.pop(0)))
61+
if subtree and subtree[0] == "R":
62+
subtree.pop(0)
63+
node.right= TreeNode(int(subtree.pop(0)))
64+
65+
elif sequence and node.val == sequence[0]:
66+
subtree = list(sequence.pop(0))
67+
subtree.pop(0)
68+
if subtree and subtree[0] == "L":
69+
subtree.pop(0)
70+
node.left = TreeNode(int(subtree.pop(0)))
71+
if subtree and subtree[0] == "R":
72+
subtree.pop(0)
73+
node.right= TreeNode(int(subtree.pop(0)))
74+
75+
if node.left:
76+
reverse_traversal_to_bst(node.left, sequence, root)
77+
if node.right:
78+
reverse_traversal_to_bst(node.right, sequence, root)
79+
80+
return root
81+
82+
if not data:
83+
return []
84+
print data
85+
return reverse_traversal_to_bst("", data.split("/")[1:], "")
86+
87+
88+
89+
90+
# Your Codec object will be instantiated and called as such:
91+
# codec = Codec()
92+
# print codec.serialize(root)
93+
# codec.deserialize(codec.serialize(root))

ProblemSolving/targetSum/target.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Pending...
2+
3+
class Solution(object):
4+
def findTargetSumWays(self, nums, S):
5+
"""
6+
:type nums: List[int]
7+
:type S: int
8+
:rtype: int
9+
"""
10+
11+
# Logic 1: Bruteforce with itertools...
12+
13+
# BruteForce with all the combinations for the target sum
14+
# * Use itertools
15+
# * add symbols to each integer and then eval() to check for target sum
16+
17+
import itertools
18+
19+
count = 0
20+
21+
if 0 in nums:
22+
i = 0
23+
while nums and i < len(nums):
24+
if nums[i] == 0:
25+
del nums[i]
26+
else:
27+
i += 1
28+
29+
if not nums:
30+
return 0
31+
32+
n = len(nums)
33+
34+
for combination in itertools.product(["+","-"], repeat=n):
35+
expression = ""
36+
for i in range(n):
37+
expression += combination[i]+str(nums[i])
38+
if eval(expression) == S:
39+
count += 1
40+
return count

0 commit comments

Comments
 (0)