zoukankan      html  css  js  c++  java
  • Basic Calculator

    Implement a basic calculator to evaluate a simple expression string.

    The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

    You may assume that the given expression is always valid.

    Some examples:

    "1 + 1" = 2
    " 2-1 + 2 " = 3
    "(1+(4+5+2)-3)+(6+8)" = 23
    

    Note: Do not use the eval built-in library function.

    1. 如果当前字符c是数字字符,数字可能不止一位,所以需要继续遍历下一个字符,若仍然是数字字符,将其与前面的连续数字字符组成一个数num,直到遇到下一个非数字字符;
    2. 如果当前的字符c是'+',那么就将前面的num加到result中,并且设置符号标记sign=1为正;
    3. 如果当前字符c是'-',那么就用result - num,并且设置符号标记sign=-1为负;
    4. 如果当前字符c是'(',那么先保存当前的result和符号sign到栈中,再继续计算括号里面的表达式;
    5. 如果当前字符c是')',那么计算完毕当前括号的result后,依次弹出栈顶的sign和result,然后将括号中的result和栈顶弹出的result相加(或相减,由sign决定);
    6. 继续以上步骤,直到遍历到字符串的最后一个字符

    Runtime: 16ms

    class Solution {
    public:
        int calculate(string s) {
            if(s.empty()) return 0;
            
            int result = 0, sign = 1, num = 0;
            stack<int> stk;
            
            for(int i = 0; i < s.length(); i++){
                if(s[i] <= '9' && s[i] >= '0')
                    num = num * 10 + s[i] - '0';
                else if(s[i] == '+' || s[i] == '-'){
                    result += num * sign;
                    sign = (s[i] == '+' ? 1 : -1);
                    num = 0;
                }    
                else if(s[i] == '('){
                    stk.push(result);
                    stk.push(sign);
                    sign = 1;
                    result = 0;
                }
                else if(s[i] == ')'){
                    result += num * sign;
                    sign = stk.top();
                    stk.pop();
                    result = stk.top() + sign * result;
                    stk.pop();
                    num = 0;
                }
            }
            if(num != 0)
                result += num * sign;
            return result;
        }
    };
  • 相关阅读:
    npm ci fast install All In One
    WebGL & CG All In One
    StackOverflow winterbash 2021 All In One
    jira advanced searching All In One
    localStorage undefined bug All In One
    vcharts bug All In One
    crypto.getRandomValues & Math.random All In One
    Web 3D 技术 All In One
    企业微信如何设置用户当前状态 All In One
    parent.postMessage bug All In One
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4860408.html
Copyright © 2011-2022 走看看