Problem : https://leetcode.com/problems/basic-calculator-ii/
Use stack to postpone the operator evaluation.
class Solution {
public int calculate(String s) {
Stack<Integer> stack = new Stack();
int num = 0;
Character opt = '+';
for (int i = 0; i <= s.length(); i++) {
if (i == s.length() || s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '*' || s.charAt(i) == '/') {
if (opt == '+') {
stack.push(num);
} else if (opt == '-') {
stack.push(-1 * num);
} else if (opt == '*') {
stack.push(stack.pop() * num);
} else if (opt == '/') {
stack.push(stack.pop() / num);
}
opt = i < s.length() ? s.charAt(i) : '+';
num = 0;
} else if (Character.isDigit(s.charAt(i))) {
num = num * 10 + s.charAt(i) - '0';
}
}
int result = 0;
while (!stack.isEmpty()) {
result += stack.pop();
}
return result;
}
}
Edited on 12/24/2021. Updated for a simpler stack based solution.
No comments:
Post a Comment