LeetCode 227. Basic Calculator II(表达式解析)

227. Basic Calculator II

Medium

Implement a basic calculator to evaluate a simple expression string.

The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.

Example 1:

Input: “3+2*2”
Output: 7
Example 2:

Input: " 3/2 "
Output: 1
Example 3:

Input: " 3+5 / 2 "
Output: 5
Note:

You may assume that the given expression is always valid.
Do not use the eval built-in library function.

题意

含有加减乘除的整数表达式判断

思路

由于只有2个优先级:乘除>加减,所以只需要用两个整型数和两个字符来存储之前的数和符号,主要是用来存储形如"a + b * "的式子。但是实际写代码之后发现还是用一个栈存储,很多地方可以用循环处理,更加方便

代码

class Solution {
    public int calculate(String s) {
        int num = 0, num1 = -1, num2 = -1;
        char op1 = 0, op2 = 0;
        boolean sign = true;
        for (char ch: s.toCharArray()) {
            if (ch == 0) {
                continue;
            } else if (ch >= '0' && ch <= '9') {
                num = num * 10 + ch - '0';
            } else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {
                if (op2 == '*') {
                    num2 *= num;
                    op2 = ch;
                } else if (op2 == '/') {
                    num2 /= num;
                    op2 = ch;
                } else if (op2 == 0 && op1 == '*') {
                    num1 *= num;
                    op1 = ch;
                } else if (op2 == 0 && op1 == '/') {
                    num1 /= num;
                    op1 = ch;
                } else if (op2 == '+' && (ch == '+' || ch == '-')) {
                    num2 += num;
                    op2 = ch;
                } else if (op2 == '-' && (ch == '+' || ch == '-')) {
                    num2 -= num;
                    op2 = ch;
                } else if (op2 == 0 && op1 == '+' && (ch == '+' || ch == '-')) {
                    num1 += num;
                    op1 = ch;
                } else if (op2 == 0 && op1 == '-' && (ch == '+' || ch == '-')) {
                    num1 -= num;
                    op1 = ch;
                } else if (op1 == 0) {
                    num1 = num;
                    op1 = ch;
                } else if (op2 == 0) {
                    num2 = num;
                    op2 = ch;
                } 
                if (op2 == '+' || op2 == '-') {
                    switch (op1) {
                        case '+':
                            num1 += num2;
                            break;
                        case '-':
                            num1 -= num2;
                            break;
                        case '*':
                            num1 *= num2;
                            break;
                        case '/':
                            num1 /= num2;
                            break;
                    }
                    op1 = op2;
                    op2 = 0;
                }
                num = 0;
                // System.out.println(num1);
                // System.out.println(op1);
                // System.out.println(num2);
                // System.out.println(op2);
                // System.out.println(num);
                // System.out.println("******");
            }
        }
        if (op1 == 0) {
            return num;
        } else if (op2 == 0) {
            switch (op1) {
                case '+':
                    return num1 + num;
                case '-':
                    return num1 - num;
                case '*':
                    return num1 * num;
                case '/':
                    return num1 / num;
            }
        } else {
            switch (op2) {
                case '*':
                    num2 *= num;
                    break;
                case '/':
                    num2 /= num;
                    break;
            }
            switch (op1) {
                case '+':
                    return num1 + num2;
                case '-':
                    return num1 - num2;
            }
        }
        return 0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值