原题链接:224. Basic Calculator
欢迎优化!
【思路】
本题考查字符串的基本操作。总共遇到的情况有:数字、+、-、空格、左括号、右括号,6种情况。
1. 没有括号时正常运算,将结果存入res中
2. 遇到左括号时将res及括号之前的运算符压栈
3. 遇到右括号时将当前值乘以左括号之前的符号(stack中取出),并加上左括号前的运算结果(stack中取出):
public int calculate(String s) {
Stack<Integer> stack = new Stack<Integer>();
int sign = 1, res = 0;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isDigit(ch)) {
int cur = ch - '0';
while (i + 1 < s.length() && Character.isDigit(s.charAt(i + 1)))
cur = cur * 10 + s.charAt(++i) - '0';
res = res + sign * cur;
} else if (ch == '+') {
sign = 1;
} else if (ch == '-') {
sign = -1;
} else if (ch == '(') {
stack.push(res);
res = 0;
stack.push(sign);
sign = 1;
} else if (ch == ')') {
res = stack.pop() * res +stack.pop();
}
}
return res;
}
37 / 37
test cases passed. Runtime: 23 ms Your runtime beats 58.40% of javasubmissions.
欢迎优化!
本文详细阐述了如何使用Java实现基本的字符串表达式计算器,包括处理加减运算符、括号以及数字输入,通过栈数据结构高效计算表达式结果。
2330

被折叠的 条评论
为什么被折叠?



