• 227.基本计算器 II


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

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

    示例 1:

    输入: "3+2*2"
    输出: 7
    示例 2:

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

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

    思路:

      • 对于 -3*5 看作:(-3) * 5,将 -3 存入栈中,前一个操作符为 * ,则从栈顶取出 -3。
      • 用一个变量,记录前一个操作符 ( + - * / ),是前一个,而不是当前操作符;
      • 当前一个操作符为 +,- 时,直接存入栈中;
      • 当前一个字符为 *,/ 时,取出栈顶元素,与当前的 number 操作后,压入栈中;
      • 累加栈中的元素,得到最终结果。

    class Solution {
        public int calculate(String s) {
            Stack<Integer> stack = new Stack<>();
            int n = s.length(), number = 0;
            char sign = '+'; // 初始为正,记录前一个操作符
            for(int i = 0; i < n; i++){
                char c = s.charAt(i);
                if(c == ' ' && i != n-1) continue; //最后一个字符是空格时,不能跳过!
                if(c >= '0' && c <= '9') number = number * 10 + (c - '0');
                if(c == '-' || c == '+' || c == '*' || c == '/' || i == n-1){
                    if(sign == '+') stack.push(number);
                    else if(sign == '-') stack.push(-number);
                    else if(sign == '*') stack.push(stack.pop() * number);
                    else if(sign == '/') stack.push(stack.pop() / number);
                    sign = c;
                    number = 0;
                }
            }
            int res = 0;
            while(!stack.isEmpty()) res += stack.pop(); //累加栈中的数
            return res;
        }
    }
  • 相关阅读:
    关于动态的添加iview admin路由以及刷新侧边栏按钮
    Qt配置,载入html,Echart, 交互
    junit、hamcrest和eclemma安装、使用
    程序中关于浮点数计算的问题
    洛谷P1164->小A点菜
    一道简单的题目
    P1101:单词方阵
    第一个博客
    php生成条形码
    php 上传音频(MP3、MP4等)文件 获取播放时间长度
  • 原文地址:https://www.cnblogs.com/luo-c/p/13854559.html
Copyright © 2020-2023  润新知