Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 0982d34

Browse files
refactor 150
1 parent 49ab6ee commit 0982d34

File tree

1 file changed

+75
-48
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+75
-48
lines changed

src/main/java/com/fishercoder/solutions/_150.java

Lines changed: 75 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -5,61 +5,88 @@
55
import java.util.Stack;
66

77
/**
8-
* Evaluate the value of an arithmetic expression in Reverse Polish Notation.
9-
10-
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
11-
12-
Some examples:
13-
14-
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
15-
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
16-
8+
* 150. Evaluate Reverse Polish Notation
9+
*
10+
* Evaluate the value of an arithmetic expression in Reverse Polish Notation.
11+
*
12+
* Valid operators are +, -, *, /. Each operand may be an integer or another expression.
13+
*
14+
* Note:
15+
*
16+
* Division between two integers should truncate toward zero.
17+
* The given RPN expression is always valid. That means the expression would always evaluate to a result and there won't be any divide by zero operation.
18+
*
19+
* Example 1:
20+
*
21+
* Input: ["2", "1", "+", "3", "*"]
22+
* Output: 9
23+
* Explanation: ((2 + 1) * 3) = 9
24+
*
25+
* Example 2:
26+
*
27+
* Input: ["4", "13", "5", "/", "+"]
28+
* Output: 6
29+
* Explanation: (4 + (13 / 5)) = 6
30+
*
31+
* Example 3:
32+
*
33+
* Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
34+
* Output: 22
35+
* Explanation:
36+
* ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
37+
* = ((10 * (6 / (12 * -11))) + 17) + 5
38+
* = ((10 * (6 / -132)) + 17) + 5
39+
* = ((10 * 0) + 17) + 5
40+
* = (0 + 17) + 5
41+
* = 17 + 5
42+
* = 22
1743
*/
1844
public class _150 {
1945

20-
public int evalRPN(String[] tokens) {
21-
Stack<String> stack = new Stack<String>();
22-
Set<String> op = new HashSet();
23-
op.add("+");
24-
op.add("-");
25-
op.add("*");
26-
op.add("/");
46+
public static class Solution1 {
47+
public int evalRPN(String[] tokens) {
48+
Stack<String> stack = new Stack<>();
49+
Set<String> op = new HashSet();
50+
op.add("+");
51+
op.add("-");
52+
op.add("*");
53+
op.add("/");
2754

28-
int exp = 0;
29-
String operand1 = "";
30-
String operand2 = "";
31-
for (int i = 0; i < tokens.length;) {
32-
while ((i < tokens.length) && (!op.contains(tokens[i]))) {
33-
stack.push(tokens[i]);
34-
i++;
35-
}
36-
if (i == tokens.length) {
37-
if (!stack.isEmpty()) {
38-
return Integer.parseInt(stack.pop());
39-
}
40-
} else if (op.contains(tokens[i])) {
41-
if (!stack.isEmpty()) {
42-
operand2 = stack.pop();
55+
int exp = 0;
56+
String operand1 = "";
57+
String operand2 = "";
58+
for (int i = 0; i < tokens.length; ) {
59+
while ((i < tokens.length) && (!op.contains(tokens[i]))) {
60+
stack.push(tokens[i]);
61+
i++;
4362
}
44-
if (!stack.isEmpty() && !op.contains(stack.peek())) {
45-
operand1 = stack.pop();
63+
if (i == tokens.length) {
64+
if (!stack.isEmpty()) {
65+
return Integer.parseInt(stack.pop());
66+
}
67+
} else if (op.contains(tokens[i])) {
68+
if (!stack.isEmpty()) {
69+
operand2 = stack.pop();
70+
}
71+
if (!stack.isEmpty() && !op.contains(stack.peek())) {
72+
operand1 = stack.pop();
73+
}
74+
if (tokens[i].equals("+")) {
75+
exp = Integer.parseInt(operand1) + Integer.parseInt(operand2);
76+
} else if (tokens[i].equals("-")) {
77+
exp = Integer.parseInt(operand1) - Integer.parseInt(operand2);
78+
} else if (tokens[i].equals("*")) {
79+
exp = Integer.parseInt(operand1) * Integer.parseInt(operand2);
80+
} else if (tokens[i].equals("/")) {
81+
exp = Integer.parseInt(operand1) / Integer.parseInt(operand2);
82+
} else {
83+
exp = Integer.parseInt(operand2);
84+
}
85+
stack.push(String.valueOf(exp));
86+
i++;
4687
}
47-
if (tokens[i].equals("+")) {
48-
exp = Integer.parseInt(operand1) + Integer.parseInt(operand2);
49-
} else if (tokens[i].equals("-")) {
50-
exp = Integer.parseInt(operand1) - Integer.parseInt(operand2);
51-
} else if (tokens[i].equals("*")) {
52-
exp = Integer.parseInt(operand1) * Integer.parseInt(operand2);
53-
} else if (tokens[i].equals("/")) {
54-
exp = Integer.parseInt(operand1) / Integer.parseInt(operand2);
55-
} else {
56-
exp = Integer.parseInt(operand2);
57-
}
58-
stack.push(String.valueOf(exp));
59-
i++;
6088
}
89+
return Integer.parseInt(stack.pop());
6190
}
62-
return Integer.parseInt(stack.pop());
6391
}
64-
6592
}

0 commit comments

Comments
 (0)