Skip to content

Commit ab71ab7

Browse files
authored
Update Basic Calculator II.java
1 parent d8655be commit ab71ab7

File tree

1 file changed

+17
-30
lines changed

1 file changed

+17
-30
lines changed

Medium/Basic Calculator II.java

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,28 @@
11
class Solution {
22
public int calculate(String s) {
3-
char sign = '+';
43
int currNum = 0;
5-
Stack<Integer> stack = new Stack<>();
4+
int prevNum = 0;
5+
int result = 0;
6+
char operation = '+';
67
for (int i = 0; i < s.length(); i++) {
7-
if (Character.isDigit(s.charAt(i))) {
8-
currNum = currNum * 10 + Character.getNumericValue(s.charAt(i));
8+
char c = s.charAt(i);
9+
if (Character.isDigit(c)) {
10+
currNum = currNum * 10 + Character.getNumericValue(c);
911
}
10-
if ((!Character.isDigit(s.charAt(i)) && s.charAt(i) != ' ') || i == s.length() - 1) {
11-
updateStackForPreviousSign(sign, stack, currNum);
12+
if ((!Character.isDigit(c) && !Character.isWhitespace(c)) || i == s.length() - 1) {
13+
if (operation == '-' || operation == '+') {
14+
result += prevNum;
15+
prevNum = operation == '+' ? currNum : -currNum;
16+
} else if (operation == '*') {
17+
prevNum = prevNum * currNum;
18+
} else {
19+
prevNum = prevNum / currNum;
20+
}
21+
operation = c;
1222
currNum = 0;
13-
sign = s.charAt(i);
1423
}
1524
}
16-
int result = 0;
17-
while (!stack.isEmpty()) {
18-
result += stack.pop();
19-
}
25+
result += prevNum;
2026
return result;
2127
}
22-
23-
private void updateStackForPreviousSign(char sign, Stack<Integer> stack, int currNum) {
24-
switch (sign) {
25-
case '+':
26-
stack.push(currNum);
27-
break;
28-
case '-':
29-
stack.push(-1 * currNum);
30-
break;
31-
case '/':
32-
stack.push(stack.pop() / currNum);
33-
break;
34-
case '*':
35-
stack.push(stack.pop() * currNum);
36-
break;
37-
default:
38-
break;
39-
}
40-
}
4128
}

0 commit comments

Comments
 (0)