227-basic-calculator-ii
Question
https://leetcode.com/problems/basic-calculator-ii/description/
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Example:
"3+2*2" = 7
" 3/2 " = 1
" 3+5 / 2 " = 5
Thought Process
- Switch at Different Character
- When the character is ' ', we skip
- We break the expression into different chunks by '+' and '-', because we know it's time to finishing the evaluation. When we encounter '*' and '/' we need to keep saving the result to a product variable
- When the character is either '+' or '-', we need to finish the previous operation whether it was division or multiplication, sign * product / num or sign * product * num and add it to the result
- When the character is either '*' or '/' we need to evaluate the previous operation product / num or product * num based on previous operator
- Time complexity O(n)
- Space complexity O(1)
class Solution {
public int calculate(String s) {
int result = 0, num = 0;
int sign = 1, product = 1;
boolean wasDivide = false;
for (char c : s.toCharArray()) {
if (c == ' ') continue;
switch (c) {
case '+':
case '-':
result += wasDivide ? sign * product / num : sign * product * num;
num = 0;
product = 1;
sign = c == '+' ? 1 : -1;
wasDivide = false;
break;
case '*':
case '/':
product = wasDivide ? product / num : product * num;
num = 0;
wasDivide = c == '/';
break;
default:
num = num * 10 + c - '0';
}
}
result += wasDivide ? sign * product / num : sign * product * num;
return result;
}
}