기초계산기Ⅱ
s
이 주어지면 이 표현식을 평가하고 해당 값을 반환합니다.정수 나누기는 0을 향해 잘려야 합니다.
주어진 표현식이 항상 유효하다고 가정할 수 있습니다. 모든 중간 결과는
[-231, 231 - 1]
범위에 있습니다.참고:
eval()
와 같이 문자열을 수학 표현식으로 평가하는 내장 함수를 사용할 수 없습니다.예 1:
입력: s = "3+2*2"
출력: 7
예 2:
입력: s = "3/2 "
출력: 1
예 3:
입력: s = "3+5/2 "
출력: 5
제약:
1 <= s.length <= 3 * 105
s
는 몇 개의 공백으로 구분된 정수와 연산자('+', '-', '*', '/')
로 구성됩니다. s
는 유효한 식을 나타냅니다. [0, 231 - 1]
범위의 음수가 아닌 정수입니다. 해결책:
class Solution:
def eval(self, a, op, b):
if op == '+':
return a + b
elif op == '-':
return a - b
elif op == '/':
return int(a / b)
elif op == '*':
return a * b
def calculate(self, s: str) -> int:
s += " "
precedence = {
'*': 1,
'/': 1,
'+': 0,
'-': 0
}
numstack = []
opstack = []
chunk = ""
for c in s:
if c == " " or c in precedence:
if len(chunk) > 0:
numstack.append(int(chunk))
chunk = ""
if c in precedence:
while len(opstack) > 0 and precedence[opstack[-1]] >= precedence[c]:
currop = opstack.pop()
b = numstack.pop()
a = numstack.pop()
res = self.eval(a, currop, b)
numstack.append(res)
opstack.append(c)
else:
chunk += c
while len(opstack) > 0:
currop = opstack.pop()
b = numstack.pop()
a = numstack.pop()
res = self.eval(a, currop, b)
numstack.append(res)
return numstack[0]
Reference
이 문제에 관하여(기초계산기Ⅱ), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/basic-calculator-ii-5bg6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)