• 基本计算器


    描述

    给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

    注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

    提示:

    1 <= s.length <= 3 * 105
    s 由数字、'+'、'-'、'('、')'、和 ' ' 组成
    s 表示一个有效的表达式
    '+' 不能用作一元运算(例如, "+1" 和 "+(2 + 3)" 无效)
    '-' 可以用作一元运算(即 "-1" 和 "-(2 + 3)" 是有效的)
    输入中不存在两个连续的操作符
    每个数字和运行的计算将适合于一个有符号的 32位 整数

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/basic-calculator
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路

    栈存临时结果和符号

    代码

    class Solution {
          public int calculate(String s) {
            Deque<Integer> stack = new ArrayDeque<>();
            int sign = 1;//1:正,0:负
            int res = 0;
            int length = s.length();
            char[] chars = s.toCharArray();
            for (int i = 0; i < length; i++) {
                char ch = chars[i];
                if (Character.isDigit(ch)){
                    int cur = ch - '0';
                    while (i+1 < length && Character.isDigit(chars[i+1])){
                        cur = cur * 10 + (chars[i+1] - '0');
                        i++;
                    }
                    res = res + sign * cur;
                }
                else if (ch == '+'){
                    sign = 1;
                }
                else if (ch == '-'){
                    sign = -1;
                }
                else if (ch == '('){
                    stack.push(res);
                    res = 0;
                    stack.push(sign);
                    sign = 1;
                }
                else if (ch == ')'){
                    res = stack.pop() * res + stack.pop();
                }
            }
            return res;
        }
    }
  • 相关阅读:
    HTTP断点续传 规格严格
    Java Shutdown 规格严格
    linux 命令源码 规格严格
    JTable调整列宽 规格严格
    linux 多CPU 规格严格
    Hello can not find git path 规格严格
    Kill 规格严格
    拜拜牛人 规格严格
    Swing 规格严格
    Debugging hangs in JVM (on AIX but methodology applicable to other platforms) 规格严格
  • 原文地址:https://www.cnblogs.com/dongma/p/15935893.html
Copyright © 2020-2023  润新知