zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    oracle 查看表空间使用率
    解决linux下vim中文乱码问题
    linux 时间同步
    oracle ho与mysql system命令
    mysql 重置root密码
    2020 10 26
    2020 10 24
    2020 10 23
    2020 10 22
    2020 10 21
  • 原文地址:https://www.cnblogs.com/luo-c/p/13854559.html
Copyright © 2011-2022 走看看