Skip to content

Commit 3e65b0b

Browse files
doesnt work for "1*2-3/4+5*6-7*8+9/10"
else everything is correct
1 parent 8588591 commit 3e65b0b

1 file changed

Lines changed: 93 additions & 0 deletions

File tree

Basic Calculator III.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Basic Calculator III
2+
# https://leetcode.com/problems/basic-calculator-iii/
3+
4+
class Calculator(object):
5+
def __init__(self):
6+
self.operators = ['+', '-', '*', '/']
7+
8+
def addition(self, a, b):
9+
return a+b
10+
11+
def subtraction(self, a, b):
12+
return a-b
13+
14+
def multiplacation(self, a, b):
15+
return a*b
16+
17+
def division(self, a, b):
18+
if (a == 0 or b == 0):
19+
return 0
20+
return a/(b)
21+
22+
def operation(self, a, b, operator):
23+
expressions = {
24+
'+': self.addition(a, b),
25+
'-': self.subtraction(a, b),
26+
'*': self.multiplacation(a, b),
27+
'/': self.division(a, b)
28+
}
29+
return expressions[operator]
30+
31+
def precedence(self, operator):
32+
precidence = {
33+
'*':1,
34+
'/':1,
35+
'+':0,
36+
'-':0,
37+
}
38+
return precidence[operator]
39+
40+
41+
class Solution(object):
42+
43+
def convertInToList(self, s):
44+
newList = []
45+
number = ""
46+
for char in list(s):
47+
if char.isnumeric():
48+
number = number + char
49+
else:
50+
if (number != ""):
51+
newList.append(int(number))
52+
number = ""
53+
newList.append(char)
54+
return newList
55+
56+
def calculate(self, s):
57+
s = s+')'
58+
s = self.convertInToList(s)
59+
numStack = []
60+
operatorStack = ['(']
61+
calculator = Calculator()
62+
for char in s:
63+
print numStack, operatorStack
64+
if(char == '('):
65+
operatorStack.append(char)
66+
elif(char == ')'):
67+
while(operatorStack and operatorStack[-1] != '('):
68+
n2 = numStack.pop()
69+
n1 = numStack.pop()
70+
op = operatorStack.pop()
71+
print "number1", n1, "number2", n2, "operator", op
72+
ans = calculator.operation(n1, n2, op)
73+
numStack.append(ans)
74+
# pop "("
75+
if operatorStack:
76+
operatorStack.pop()
77+
elif(char in calculator.operators):
78+
operatorStack.append(char)
79+
else:
80+
ans = char
81+
while(operatorStack and operatorStack[-1] == '*' or operatorStack[-1] == '/'):
82+
op = operatorStack.pop()
83+
num = numStack.pop()
84+
print "current num", ans, "top of stack", num, "operator", op,
85+
ans = calculator.operation(num, ans, op)
86+
print "answer", ans
87+
numStack.append(ans)
88+
return int(numStack[-1])
89+
"""
90+
:type s: str
91+
:rtype: int
92+
"""
93+

0 commit comments

Comments
 (0)