基本计算器

作者: windUtterance | 来源:发表于2020-05-17 10:10 被阅读0次

题目描述
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。

示例
输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23

Java代码

class Solution {
    public int calculate(String s) {
        Deque<Boolean> dq = new ArrayDeque<>();
        int result = 0, opr = 0;  //result:当前的结果值,opr:当前的被加/减数
        Character op = null;  //当前要执行的运算符

        for(char c : s.toCharArray()) {
            if(c == '+' || c == '-') {
                if(op == null) {
                    //遇到的第一个运算符时,将result置为opr(即运算符左边的数字)
                    result = opr;
                } else {
                    result = cal(op, result, opr);
                }
                //根据栈顶元素决定是否反转运算符
                op = swap(dq.peek() == null ? false : dq.peek(), c);
                opr = 0;
            } else if(c == '(') {
                dq.push(op != null && op == '-');
            } else if(c == ')') {
                dq.pop();
            } else if(c != ' ') {
                opr = opr * 10 + c - '0';
            } 
        }
        if(op == null) {
            return opr;  //算式中没有运算符时,opr就是最终结果
        } else {
            return cal(op, result, opr);
        }
    }

    char swap(boolean swap, char c) {
        if(swap) {
            return c == '+' ? '-' : '+';
        } else {
            return c;
        }
    }

    private int cal(char op, int opr1, int opr2) {
        switch(op) {
            case '+':
            return opr1 + opr2;
            case '-':
            return opr1 - opr2;
            default:
            return 0;
        }
    }
}

相关文章

网友评论

    本文标题:基本计算器

    本文链接:https://www.haomeiwen.com/subject/vcsjohtx.html