227. 基本计算器 II(算法思维系列)


227. 基本计算器 II

题目

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
在这里插入图片描述

解题思路

主要思想就是拆分复杂问题,比如先处理加减、再处理乘除等。详情见书328。

代码

class Solution {
    public int calculate(String s) {
        Stack<Integer> stack = new Stack<>();
        //记录num前的符号
        char sign = '+';

        int num = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (Character.isDigit(c)) {
                num = 10 * num + (c - '0');
            }
//            遇到左括号要递归计算num
            if (c == '(') {
                num = calculate(s);
            }


            if ((!Character.isDigit(c) && c != ' ') || i == s.length() - 1) {
                switch (sign) {
                    case '+':
                        stack.push(num);
                        break;
                    case '-':
                        stack.push(-num);
                        break;
                    case '*':
                        Integer pop = stack.pop();
                        stack.push(pop * num);
                        break;
                    case '/':
                        Integer pop2 = stack.pop();
                        stack.push(pop2 / num);
                        break;
                }

                sign = c;
                num = 0;
//                遇到右括号结束递归,返回结果
                if (c == ')') {
                    break;
                }
            }
        }
        //将栈中所有元素求和就是答案
        int res = 0;
        while (!stack.isEmpty()) {
            res += stack.peek();
            stack.pop();
        }
        return res;
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录