g0201_0300.s0227_basic_calculator_ii.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0201_0300.s0227_basic_calculator_ii;
// #Medium #Top_Interview_Questions #String #Math #Stack #Level_2_Day_18_Stack
// #2022_07_04_Time_8_ms_(95.32%)_Space_43.6_MB_(79.36%)
/**
* 227 - Basic Calculator II\.
*
* Medium
*
* Given a string `s` which represents an expression, _evaluate this expression and return its value_.
*
* The integer division should truncate toward zero.
*
* You may assume that the given expression is always valid. All intermediate results will be in the range of [-231, 231 - 1]
.
*
* **Note:** You are not allowed to use any built-in function which evaluates strings as mathematical expressions, such as `eval()`.
*
* **Example 1:**
*
* **Input:** s = "3+2\*2"
*
* **Output:** 7
*
* **Example 2:**
*
* **Input:** s = " 3/2 "
*
* **Output:** 1
*
* **Example 3:**
*
* **Input:** s = " 3+5 / 2 "
*
* **Output:** 5
*
* **Constraints:**
*
* * 1 <= s.length <= 3 * 105
* * `s` consists of integers and operators `('+', '-', '*', '/')` separated by some number of spaces.
* * `s` represents **a valid expression**.
* * All the integers in the expression are non-negative integers in the range [0, 231 - 1]
.
* * The answer is **guaranteed** to fit in a **32-bit integer**.
**/
public class Solution {
public int calculate(String s) {
int sum = 0;
int tempSum = 0;
int num = 0;
char lastSign = '+';
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
num = num * 10 + c - '0';
}
// i == s.length() - 1 will make sure that after last num is
// made and there is nothing to read anything from 's', the final computation is done
if (i == s.length() - 1 || !Character.isDigit(c) && c != ' ') {
switch (lastSign) {
case '+':
sum += tempSum;
tempSum = num;
break;
case '-':
sum += tempSum;
tempSum = -num;
break;
case '*':
tempSum *= num;
break;
case '/':
if (num != 0) {
tempSum /= num;
}
break;
default:
break;
}
lastSign = c;
num = 0;
}
}
// finally, add tempSum to sum
sum += tempSum;
return sum;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy