224.Basic Calculator|Java最短コード実装


原題リンク:
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.
最適化を歓迎します.