每日一题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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值