zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 227 基本计算器 II(二)

    227. 基本计算器 II

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

    字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

    示例 1:

    输入: “3+2*2”
    输出: 7
    示例 2:

    输入: " 3/2 "
    输出: 1
    示例 3:

    输入: " 3+5 / 2 "
    输出: 5
    说明:

    你可以假设所给定的表达式都是有效的。
    请不要使用内置的库函数 eval。
    PS:
    每次处理完一个数就压栈,可以不处理括号

    class Solution {
        public int calculate(String s) {
            Stack<Integer> stack = new Stack<>();
            
            int sign = 1;  // 表示正负号  2-3*3 = 2+(-3)*3
            int msign = 0; // 1表示相乘 -1 表示相除  0 表示无操作
            for(int i=0; i<s.length(); i++){
                char ch = s.charAt(i);
                if(Character.isDigit(ch)){
                    // 如果是数字
                    int num = ch - '0';
                    while(i+1<s.length() && Character.isDigit(s.charAt(i+1))){
                        num = num*10 + (s.charAt(i+1) - '0');
                        i++;
                    }
                    
                    if(msign == 1){   //相乘
                        stack.push(stack.pop() * num);
                        msign = 0;
                    }else if(msign == -1){  // 相除
                        stack.push(stack.pop() / num);
                        msign = 0;
                    }else{
                        stack.push(num * sign);
                    }
                    
                }else if(ch == '+'){
                    sign = 1;
                }else if(ch == '-'){
                    sign = -1;
                }else if(ch == '*'){
                    msign = 1;
                    sign = 1;
                }else if(ch == '/'){
                    msign = -1;
                    sign = 1;
                }
            }
            
            int res = 0;
            while(!stack.isEmpty()){
                res += stack.pop();
            }
            return res;
        }
    }
    
  • 相关阅读:
    AGC041
    二分图 学习笔记
    区间DP 学习笔记
    3月21日考试 题解(数据结构+区间DP+贪心)
    Tarjan 做题总结
    3月15日考试 题解(数学+背包+线段树)
    差分约束 学习笔记
    Tarjan算法 学习笔记
    拓扑排序 学习笔记
    并查集 学习笔记
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075992.html
Copyright © 2011-2022 走看看