Skip to content

Commit 80723eb

Browse files
committed
update 18.3.2024
1 parent fd8109b commit 80723eb

13 files changed

+509
-44
lines changed

1. Two Sum.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def twoSum(self, nums, target):
2525
return [hash_map[target - num], i]
2626
else : # not found target - num yet, then continue to discover, hope to see target - num in the future :)
2727
hash_map[num] = i
28-
28+
2929
nums = [3,2,4]
3030
target = 6
3131
obj = Solution()

133. Clone Graph.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
"""
2+
# Definition for a Node.
3+
class Node(object):
4+
def __init__(self, val = 0, neighbors = None):
5+
self.val = val
6+
self.neighbors = neighbors if neighbors is not None else []
7+
"""
8+
9+
class Node(object):
10+
def __init__(self, val = 0, neighbors = None):
11+
self.val = val
12+
self.neighbors = neighbors if neighbors is not None else []
13+
14+
class Solution(object):
15+
def __init__(self) :
16+
self.visited = {}
17+
18+
def cloneGraph(self, node):
19+
"""
20+
:type node: Node
21+
:rtype: Node
22+
"""
23+
if not node :
24+
return node
25+
26+
if node in self.visited :
27+
return self.visited[node]
28+
29+
clone_root = Node(node.val, [])
30+
self.visited[node] = clone_root
31+
neighbors = node.neighbors
32+
33+
clone_root.neighbors = [self.cloneGraph(i) for i in neighbors]
34+
return clone_root
35+
36+
Lines changed: 95 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,103 @@
1-
class Solution:
2-
def add(self, a, b):
3-
return a + b
41

5-
def subtract(self, a, b):
6-
return a - b
2+
# class Solution:
3+
# def add(self, a, b):
4+
# return a + b
5+
6+
# def subtract(self, a, b):
7+
# return a - b
8+
9+
# def multiple(self, a, b):
10+
# return a * b
11+
12+
# def divide(self, a, b):
13+
# return int(a / b)
14+
15+
# def evalRPN(self, tokens):
16+
# operator = {
17+
# "+": self.add,
18+
# "-": self.subtract,
19+
# "*": self.multiple,
20+
# "/": self.divide,
21+
# }
22+
# stack = []
23+
# for token in tokens:
24+
# if token not in operator:
25+
# stack.append(int(token))
26+
# continue
27+
28+
# # Here token is a operator
29+
# second_num = stack[-1]
30+
# stack.pop()
31+
# first_num = stack[-1]
32+
# stack.pop()
33+
# ans = operator[token](first_num, second_num)
34+
# stack.append(ans)
35+
36+
# return stack[0]
37+
738

8-
def multiple(self, a, b):
9-
return a * b
1039

11-
def divide(self, a, b):
12-
return int(a / b)
1340

14-
def evalRPN(self, tokens):
15-
operator = {
16-
"+": self.add,
17-
"-": self.subtract,
18-
"*": self.multiple,
19-
"/": self.divide,
20-
}
41+
42+
43+
44+
45+
46+
47+
# UPDATE Pi Day 2024
48+
import math
49+
class Solution:
50+
def evalRPN(self, tokens) :
51+
52+
def add(a, b) :
53+
return int(a) + int(b)
54+
55+
def subtract(a, b) :
56+
return int(a) - int(b)
57+
58+
def mul(a, b) :
59+
60+
return int(a) * int(b)
61+
62+
def divide(a, b) :
63+
if b == 0 :
64+
print("ERROR")
65+
return
66+
67+
return math.trunc(int(a) / int(b))
68+
2169
stack = []
22-
for token in tokens:
23-
if token not in operator:
24-
stack.append(int(token))
70+
71+
map_func = {"+": add, "-": subtract, "*": mul, "/": divide}
72+
73+
for token in tokens :
74+
if token not in map_func :
75+
stack.append(token)
2576
continue
2677

27-
# Here token is a operator
28-
second_num = stack[-1]
29-
stack.pop()
30-
first_num = stack[-1]
31-
stack.pop()
32-
ans = operator[token](first_num, second_num)
33-
stack.append(ans)
78+
# ELSE
79+
# Then calculate, append to the end of stack
80+
second = stack.pop()
81+
first = stack.pop()
82+
83+
ans = map_func[token](first, second)
84+
85+
stack.append(str(ans))
86+
87+
return int(stack[0])
88+
89+
90+
91+
92+
93+
94+
95+
96+
tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
97+
obj = Solution()
98+
print(obj.evalRPN(tokens))
99+
100+
101+
34102

35-
return stack[0]
103+

155. Min Stack.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
class MinStack(object):
2+
3+
def __init__(self):
4+
self.min_stack = []
5+
self.nums = []
6+
7+
8+
def push(self, val):
9+
"""
10+
:type val: int
11+
:rtype: None
12+
"""
13+
if self.nums == [] :
14+
self.min_stack.append(val)
15+
else :
16+
if val > self.min_stack[-1] :
17+
self.min_stack.append(self.min_stack[-1])
18+
else :
19+
self.min_stack.append(val)
20+
21+
# Update nums
22+
self.nums.append(val)
23+
24+
25+
26+
27+
def pop(self):
28+
"""
29+
:rtype: None
30+
"""
31+
remover = self.nums.pop()
32+
_ = self.min_stack.pop()
33+
pass
34+
35+
36+
def top(self):
37+
"""
38+
:rtype: int
39+
"""
40+
return self.nums[-1]
41+
42+
43+
def getMin(self):
44+
"""
45+
:rtype: int
46+
"""
47+
return self.min_stack[-1]
48+
49+
50+
51+
# Your MinStack object will be instantiated and called as such:
52+
# obj = MinStack()
53+
# obj.push(val)
54+
# obj.pop()
55+
# param_3 = obj.top()
56+
# param_4 = obj.getMin()

20. Valid Parentheses.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution(object):
2+
def isValid(self, s):
3+
"""
4+
:type s: str
5+
:rtype: bool
6+
"""
7+
marks = list(s)
8+
pair = {"[": ']', "(": ')', "{": '}'}
9+
open_mark = ('[', '{', '(')
10+
close_mark = (']', '}', ')')
11+
12+
stack = []
13+
14+
for mark in marks :
15+
if mark in open_mark :
16+
stack.append(mark)
17+
continue
18+
19+
# ELSE mark in close
20+
if stack == [] :
21+
return False
22+
23+
last_open = stack.pop()
24+
25+
if mark != pair[last_open] :
26+
return False
27+
# else continue
28+
29+
return stack == []
30+

279. Perfect Squares.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import math
2+
class Solution(object):
3+
def numSquares(self, n):
4+
"""
5+
:type n: int
6+
:rtype: int
7+
"""
8+
9+
10+
queue = []
11+
visited = set()
12+
step = 0
13+
14+
queue.append(n)
15+
visited.add(n)
16+
target = 0
17+
18+
19+
def adjacent(n) :
20+
max_sqrt = int(math.sqrt(n))
21+
return [n - i**2 for i in range(max_sqrt, 0, -1)]
22+
23+
while len(queue) > 0 :
24+
for i in range(len(queue)) :
25+
current = queue.pop(0)
26+
visited.add(current)
27+
28+
if current == target :
29+
return step
30+
31+
adj_list = adjacent(current)
32+
for num in adj_list :
33+
if num not in visited :
34+
queue.append(num)
35+
visited.add(num)
36+
37+
step += 1
38+
39+
40+
obj = Solution()
41+
n = int(input())
42+
print(obj.numSquares(n))
43+
44+
45+
46+

394. Decode String.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Solution(object):
2+
def decodeString(self, s):
3+
"""
4+
:type s: str
5+
:rtype: str
6+
"""
7+
stack = []
8+
digits = {"0","1", "2", "3", "4", "5", "6", "7", "8", "9"}
9+
10+
for char in s :
11+
12+
if char != "]" :
13+
stack.append(char)
14+
continue
15+
16+
# ELSE when char= "]"
17+
letters = ''
18+
while stack[-1] != "[" :
19+
letter = stack.pop()
20+
letters = letter + letters
21+
22+
23+
_ = stack.pop() # _ = "["
24+
25+
# begin to iterate over nums
26+
27+
nums = ''
28+
while stack and stack[-1] in digits :
29+
num = stack.pop()
30+
nums = num + nums
31+
32+
stack.append(int(num) * letters)
33+
34+
print(int("".join(nums)))
35+
36+
return "".join(stack)
37+
38+
39+
40+
s = "10[leetcode]"
41+
42+
obj = Solution()
43+
print(obj.decodeString(s))
44+
45+
46+
47+
48+
49+
50+
51+

494. Target Sum.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution(object):
2+
def __init__(self) :
3+
self.visited = {}
4+
def findTargetSumWays(self, nums, target):
5+
"""
6+
:type nums: List[int]
7+
:type target: int
8+
:rtype: int
9+
"""
10+
n = len(nums)
11+
def find(i, target) :
12+
if i == n-1 :
13+
return int(nums[i] == target) + int(-nums[i] == target)
14+
15+
if (i, target) in self.visited :
16+
return self.visited[(i, target)]
17+
18+
# ELSE
19+
ans = find(i+1, target + nums[i]) + find(i+1, target - nums[i])
20+
self.visited[(i, target)] = ans
21+
22+
return ans
23+
24+
ans = find(0, target)
25+
return ans
26+
27+
nums = [1,1,1,1,1]
28+
obj = Solution()
29+
print(obj.findTargetSumWays(nums= nums, target= 3))
30+

0 commit comments

Comments
 (0)