@@ -72,6 +72,13 @@ https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/
7272
7373> 逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)* (c+d)转换为ab+cd+*
7474
75+ 思路就是:
76+
77+ - 遍历列表,依次入栈,直到遇到算数运算符。
78+ - 将栈顶两个元素出栈运算,将结果压栈
79+ - 重复以上过程直到所有的 token 都处理完毕。
80+
81+ ![ ] ( https://tva1.sinaimg.cn/large/0081Kckwly1gkeeips7ogj30a40gv3z7.jpg )
7582
7683## 关键点
7784
@@ -85,6 +92,10 @@ https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/
8592
8693## 代码
8794
95+ 代码支持:JS,Python,Java
96+
97+ JS Code:
98+
8899``` js
89100/**
90101 * @param {string[]} tokens
@@ -124,10 +135,64 @@ var evalRPN = function(tokens) {
124135
125136```
126137
138+
139+ Python Code:
140+
141+ ``` python
142+ class Solution :
143+ def evalRPN (self , tokens : List[str ]) -> int :
144+ if len (tokens) > 2 :
145+ stack = []
146+ operations = [' +' , ' -' , ' *' , ' /' ]
147+ for token in tokens:
148+ if token in operations:
149+ b = int (stack.pop())
150+ a = int (stack.pop())
151+ if ' +' == token:
152+ tmp = a + b
153+ elif ' -' == token:
154+ tmp = a - b
155+ elif ' *' == token:
156+ tmp = a * b
157+ else :
158+ tmp = int (a / b)
159+ stack.append(tmp)
160+ else :
161+ stack.append(token)
162+ return stack[0 ]
163+ return int (tokens[- 1 ])
164+ ```
165+
166+
167+ Java Code:
168+
169+ ``` java
170+ class Solution {
171+ public static int evalRPN (String [] tokens ) {
172+ int [] numStack = new int [tokens. length / 2 + 1 ];
173+ int index = 0 ;
174+ for (String s : tokens) {
175+ if (s. equals(" +" )) {
176+ numStack[index - 2 ] += numStack[-- index];
177+ } else if (s. equals(" -" )) {
178+ numStack[index - 2 ] -= numStack[-- index];
179+ } else if (s. equals(" *" )) {
180+ numStack[index - 2 ] *= numStack[-- index];
181+ } else if (s. equals(" /" )) {
182+ numStack[index - 2 ] /= numStack[-- index];
183+ } else {
184+ numStack[index++ ] = Integer . parseInt(s);
185+ }
186+ }
187+ return numStack[0 ];
188+ }
189+ }
190+ ```
191+
192+
127193## 扩展
128194
129- 逆波兰表达式中只改变运算符的顺序,并不会改变操作数的相对顺序,这是一个重要的性质。
130- 另外逆波兰表达式完全不关心操作符的优先级,这在中缀表达式中是做不到的,这很有趣,感兴趣的可以私下查找资料研究下为什么会这样。
195+ 逆波兰表达式中只改变运算符的顺序,并不会改变操作数的相对顺序,这是一个重要的性质。另外逆波兰表达式完全不关心操作符的优先级,这在中缀表达式中是做不到的,这很有趣,感兴趣的可以私下查找资料研究下为什么会这样。
131196
132197
133198
0 commit comments