224.Basic Calculator|Java最短コード実装
原題リンク:
224. Basic Calculator
【考え方】
この問題は文字列の基本操作を調べる.数字、+、-、スペース、左かっこ、右かっこの6つのケースがあります.
1.かっこがない場合は正常に演算し、結果をresに格納する
2.左括弧に遭遇した場合resおよび括弧より前の演算子をスタックに押し込む
3.右かっこが発生した場合、現在の値に左かっこより前の符号を乗算し(stackから取り出す)、左かっこより前の演算結果を加算する(stackから取り出す):
37/37
test cases passed. Runtime: 23 ms Your runtime beats 58.40% of javasubmissions.
最適化を歓迎します.
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.
最適化を歓迎します.