题目:
根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
思路:
注意负数的情况:用isdigit()无法判别负数
解答:
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
if len(tokens)==1:
return int(tokens[0])
stack=[]
for val in tokens:
if val in "+-*/":
val1=stack.pop()
val2=stack.pop()
if val=='+':
tmp=val2+val1
elif val=='-':
tmp=val2-val1
elif val=='*':
tmp=val2*val1
elif val=='/':
if val2<0 or val1<0:
tmp=int(val2/val1)
else:
tmp=val2//val1
stack.append(tmp)
else:
stack.append(int(val))
return stack[-1]
方法二:
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
stack=[]
for item in tokens:
if item not in {'+','-','*','/'}:
stack.append(item)
else:
first=stack.pop()
second=stack.pop()
#以 f开头表示在字符串内支持大括号内的python 表达式
#print(f'{second} {item} {first}')
ans=int(eval(f'{second} {item} {first}'))
stack.append(ans)
return int(stack.pop())