Problem
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
The expression string contains only non-negative integers, +, -, *, / operators , open ( and closing parentheses ) and empty spaces . 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 [-2147483648, 2147483647].
Some examples:
</>复制代码
"1 + 1" = 2
" 6-4 / 2 " = 4
"2*(5+5*2)/3+(6/2+8)" = 21
"(2+6* 3+5- (3*14/7+2)*5)+3"=-12
Note: Do not use the eval built-in library function.
Solution</>复制代码
class Solution {
public int calculate(String s) {
s = s.replaceAll(" ", "");
if (s.length() == 0) return 0;
Stack stack = new Stack<>();
char sign = "+";
int res = 0, pre = 0, i = 0;
while (i < s.length()) {
char ch = s.charAt(i);
//consecutive digits as a number, save in `pre`
if (Character.isDigit(ch)) {
pre = pre*10+(ch-"0");
}
//recursively calculate results in parentheses
if (ch == "(") {
int j = findClosing(s.substring(i));
pre = calculate(s.substring(i+1, i+j));
i += j;
}
//for new signs, calculate with existing number/sign, then update number/sign
if (i == s.length()-1 || !Character.isDigit(ch)) {
switch (sign) {
case "+":
stack.push(pre); break;
case "-":
stack.push(-pre); break;
case "*":
stack.push(stack.pop()*pre); break;
case "/":
stack.push(stack.pop()/pre); break;
}
pre = 0;
sign = ch;
}
i++;
}
while (!stack.isEmpty()) res += stack.pop();
return res;
}
//Eliminate all "()" pairs, calculate the result in between and save in `pre`
private int findClosing(String s) {
int level = 0, i = 0;
for (i = 0; i < s.length(); i++) {
if (s.charAt(i) == "(") level++;
else if (s.charAt(i) == ")") {
level--;
if (level == 0) break;
} else continue;
}
return i;
}
}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/77149.html
摘要:复杂度思路用两个来分别记录当前的结果和操作符注意每一次统计当前的的时候,要看一下下一位的操作符。有一种的方法,是表示的是匹配任意的空白符,包括空格,制表符,换行符,中文全角空格等。也可以用更简单的方法,。 LeetCode[227] Basic Calculator II Implement a basic calculator to evaluate a simple expres...
摘要:复杂度思路将字符串先转换成后缀表达式,再将其出来。 Leetcode[224] Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ),...
Problem 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 sho...
Problem Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and e...
摘要:题目链接,就是感觉条件有点多简单点的写法,把直接用存在里面,就存成,存成题目链接这题就是碰到在加减后面怎么处理的问题。用一个来表示之前的,所以碰到现在是乘的时候就,除类似。 224. Basic Calculator 题目链接:https://leetcode.com/problems... stack,就是感觉条件有点多 public class Solution { pub...
阅读 2632·2021-09-24 10:29
阅读 3961·2021-09-22 15:46
阅读 2656·2021-09-04 16:41
阅读 3053·2019-08-30 15:53
阅读 1344·2019-08-30 14:24
阅读 3141·2019-08-30 13:19
阅读 2248·2019-08-29 14:17
阅读 3621·2019-08-29 12:55