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;
        }
    }
    
  • 相关阅读:
    HDOJ 1207 汉诺塔II
    [转]写代码的小女孩
    POJ Subway tree systems
    HDOJ 3555 Bomb (数位DP)
    POJ 1636 Prison rearrangement (DP)
    POJ 1015 Jury Compromise (DP)
    UVA 10003
    UVA 103 Stacking Boxes
    HDOJ 3530 Subsequence
    第三百六十二、三天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075349.html
Copyright © 2011-2022 走看看