Skip to content

Commit 8d6f08e

Browse files
committed
计算波兰式
1 parent ae7c808 commit 8d6f08e

File tree

4 files changed

+65
-2
lines changed

4 files changed

+65
-2
lines changed

LeetCode/Doc/计算逆波兰式的值.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
1313
## 解题思路
1414

15-
利用栈的思想求解
15+
从头遍历元素,如果当前元素不是+、0、*、/之一,即为数字,则将该字符串转化为数字后入栈,如果当前元素时运算符,则从栈中弹出连续的两个元素作为操作数,然后结合当前元素(操作符)计算当前式子的结果,然后将结果再次入栈,直至遍历完成。
1616

17+
需要注意的一个细节是弹出的两个元素作为二元操作符两边时的顺序,举例:
18+
["2", "1", "/", "3", "*"]
19+
入栈后:[2,1]
20+
出栈时op1=1,op2=2,所以结果应该是op2/op1而不是op1/op2.
1721
## 代码
1822

19-
[这里](../src/n/Solution.java)
23+
[这里](../src/two/Solution.java)
-181 Bytes
Binary file not shown.
Binary file not shown.

LeetCode/src/two/Solution.java

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package two;
2+
3+
import java.util.Stack;
4+
5+
/**
6+
* @author dmrfcoder
7+
* @date 2019/4/10
8+
*/
9+
public class Solution {
10+
public int evalRPN(String[] tokens) {
11+
Stack<Integer> operateStack = new Stack<>();
12+
13+
int size = tokens.length;
14+
15+
16+
for (int index = 0; index < size; index += 1) {
17+
String itemToken = tokens[index];
18+
19+
if ("+".equals(itemToken) || "-".equals(itemToken) || "*".equals(itemToken) || "/".equals(itemToken)) {
20+
Integer operate2 = operateStack.pop();
21+
Integer operate1 = operateStack.pop();
22+
Integer result = 0;
23+
switch (itemToken) {
24+
case "+":
25+
26+
result = operate1 + operate2;
27+
break;
28+
case "-":
29+
30+
result = operate1 - operate2;
31+
break;
32+
case "*":
33+
result = operate1 * operate2;
34+
break;
35+
case "/":
36+
result = (Integer) operate1 / operate2;
37+
break;
38+
default:
39+
break;
40+
}
41+
operateStack.push(result);
42+
43+
} else {
44+
operateStack.push(Integer.valueOf(itemToken));
45+
}
46+
47+
48+
}
49+
50+
51+
return operateStack.pop();
52+
}
53+
54+
public static void main(String[] args) {
55+
String[] token = {"2","1","+","3","*"};
56+
Solution solution = new Solution();
57+
System.out.println(solution.evalRPN(token));
58+
}
59+
}

0 commit comments

Comments
 (0)