力扣算法 - 基本计算器

基本计算器

题目
/***
 * 基本计算器
 * 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 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;
    }

你可能感兴趣的:(力扣算法 - 基本计算器)