每日一题9 (计算器)

原题入口
978. 基础计算器
中文English
实现一个基础的计算器来计算一个简单表达式。

这个表达式字符串可能包含左括号 ‘(’ 与右括号 ‘)’,加号 ‘+’ 或者 减号 ‘-’,非负整数以及空格 ’ '。

给出的表达式总是合理的。

样例
样例 1

输入:“1 + 1”
输出:2
样例 2

输入:"(1+(4+5+2)-3)+(6+8)"
输出:23
注意事项
请 不要 使用内置用来计算字符串表达式的函数

public class Solution {
    
    
    /**
     * @param s: the given expression
     * @return: the result of expression
     */
    public int calculate(String s) {
    
    
        // Write your code here
        Stack<Integer> stack = new Stack<Integer>();
        int result = 0;
        int sign = 1;
        int number = 0;
        for (int i = 0; i < s.length(); i++) {
    
    
            char c = s.charAt(i);
            switch (c) {
    
    
                case '+':
                    result += sign * number;
                    number = 0;
                    sign = 1;
                    break;
                case '-':
                    result += sign * number;
                    number = 0;
                    sign = -1;
                    break;
                case '(':
                    stack.push(result);//将当前的值与符号入栈
                    stack.push(sign);
                    sign = 1;
                    result = 0;
                    break;
                case ')':
                    result += sign * number;
                    number = 0;
                    result *= stack.pop();//给括号内计算出的值拼接符号
                    result += stack.pop();//整合栈内的值与括号包括的结果
                case ' ':
                    break;
                default:
                    number = 10 * number + (int)(c - '0');
            }
        }
        if (number != 0) {
    
    
            result += sign * number;
        }
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40026668/article/details/115077105