原题链接: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.
欢迎优化!