美文网首页
力扣算法 - 基本计算器

力扣算法 - 基本计算器

作者: Mr_Bob_ | 来源:发表于2020-07-09 15:12 被阅读0次

    基本计算器

    题目
    /***
     * 基本计算器
     * https://leetcode-cn.com/problems/basic-calculator/
     * 实现一个基本的计算器来计算一个简单的字符串表达式的值。
     * 思路:
     * 从左往右遍历
     * 如果是数字(考虑多多位数)
     * 例如 678 --> 0 * 10 + 6  = 6 ---> 6 * 10 + 7 = 67  ---> 67 * 10 + 8 = 678
     * 即  operand = operand * 10 + (int) (charStr - '0');
     * 如果遇到 ' ( ' 就 把之前计算结果和正负号 push 进栈 ,  遇到 ')' 取出之前结果, 出栈累加
     *
     */
    
    Java实现
       public static int calculate(String s) {
            Stack<Integer> stack = new Stack<>();
            int operand = 0;  // 记录多位数
            int result = 0; //  结果
            int sign = 1;  // 记录正负号
            for (int i = 0; i < s.length(); i++) {
                char charStr = s.charAt(i);
                if (Character.isDigit(charStr)) { // 如果是数字
                    operand = operand * 10 + (int) (charStr - '0');
                } else if (charStr == '+') {
                    result += sign * operand;
                    sign = 1;
                    operand = 0;
                } else if (charStr == '-') {
                    result += sign * operand;
                    sign = -1;
                    operand = 0;
                } else if (charStr == '(') {
                    // 把之前的结果和正负符号 存入栈
                    stack.push(result);
                    stack.push(sign);
    
                    result = 0;
                    sign = 1;
    
                } else if (charStr == ')') {
                    // 计算括号内的结果
                    result += sign * operand;
    
                    // 取出小括号之前的符号
                    int tempSign = stack.pop();
                    // 取出之前的结果 * 正负号
                    result = stack.pop() + result * tempSign;
                    //复位
                    operand = 0;
                }
            }
    
            return result + sign * operand;
        }
    
    

    相关文章

      网友评论

          本文标题:力扣算法 - 基本计算器

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