leetcode刷题-题目2:逆波兰表达式计算
来源:互联网 发布:js判断按钮是否被点击 编辑:程序博客网 时间:2024/05/20 15:11
第二道题: 计算逆波兰表达式。算符位:(+,_,*,/)
这道也很简单,首先要理解啥叫逆波兰表达式:
我们知道一般的算数表达式如下:(1+2)*3 -4。我们暂且称之为中序表达式,就是运算符在操作数中间。
所谓逆波兰就是以及运算符紧邻在操作数之后。例如上面的表达式逆波兰式位:12+3*4-。逆波兰式的特性是
不用考虑运算符的优先级,适合计算机运算。
计算逆波兰式的算法可以表示为:
初始化操作数栈。
扫描输入 tokens:
如果当前token为运算符,从操作数栈取出两个操作数,进行运算,结果入栈。
如果当前token位操作数,入栈
结果操作数栈应该仅剩一个值,即为所求。
注意这里没有考虑输入有误的情况。
代码如下:
class Solution:
# @param tokens, a list of string
# @return an integer
def evalRPN(self, tokens):
op_d={}
op_d['+']=lambda x,y:x+y
op_d['-']=lambda x,y:x-y
op_d['*']=lambda x,y:x*y
op_d['/']=lambda x,y:float(x)/float(y)
def find_op(str_):
try:
op=op_d[str_]
except KeyError:
raise ValueError("invalid operator: "+str_)
return op
ll_optor=[]
ll_opand=[]
operator = set(['+','-','*','/'])
for token in tokens:
if token in operator:
r_optor = ll_optor.pop()
l_optor = ll_optor.pop()
op=find_op(token)
result = apply(op,[int(l_optor),int(r_optor)])
ll_optor.append(result)
else :
ll_optor.append(token)
return int(ll_optor[0])
- leetcode刷题-题目2:逆波兰表达式计算
- 逆波兰表达式计算
- leetcode刷题-题目2 :逆波兰式-扩展
- 计算表达式-逆波兰表达式
- leetcode Evaluate Reverse Polish Notation(计算逆波兰表达式)
- java leetcode之逆波兰表达式计算四则运算
- 【LeetCode刷题Java版】Evaluate Reverse Polish Notation(计算逆波兰表达式)
- 递归计算逆波兰表达式
- [LeetCode] 逆波兰表达式求值
- 数据结构-------计算逆波兰表达式(后缀表达式)
- 波兰、逆波兰表达式
- 逆波兰表达式的生成及计算
- 逆波兰表达式的生成及计算
- Python小练习:逆波兰表达式计算
- 逆波兰表达式的计算问题
- 续前篇-关于逆波兰表达式的计算
- Python3实现逆波兰表达式计算
- 逆波兰表达式的产生及计算
- javascript面向对象编程
- d/D g/G h/H n/N p/P 你真的了解它们的区别吗?
- Android系统镜像文件的打包过程分析
- max_element和min_element
- 快速排序(python)
- leetcode刷题-题目2:逆波兰表达式计算
- vim的配置文件在哪?
- 微信js 大转盘抽奖
- 大康师傅你死定了
- ResourceProperties
- Python的函数参数传递:传值?引用?
- hive中使用sql语句需要注意的事项
- 关于 cpu core thread etc
- request和response对象(疑问:为什么servlet和jsp中可以直接使用req和res对象?如何理解内置的含义?)