• 224. 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 .

    Example 1:

    Input: "1 + 1"
    Output: 2
    

    Example 2:

    Input: " 2-1 + 2 "
    Output: 3

    Example 3:

    Input: "(1+(4+5+2)-3)+(6+8)"
    Output: 23
    Note:
    • You may assume that the given expression is always valid.
    • Do not use the eval built-in library function.

    Approach #1: Math. [Java]

    class Solution {
        public int calculate(String s) {
            int ret = 0;
            Stack<Integer> stack = new Stack<>();
            
            int sign = 1;
            int number = 0;
            
            for (int i = 0; i < s.length(); ++i) {
                char c = s.charAt(i);
                if (Character.isDigit(c)) {
                    number = number * 10 + c - '0';
                } else if (c == '-') {
                    ret += number * sign;
                    number = 0;
                    sign = -1;
                } else if (c == '+') {
                    ret += number * sign;
                    number = 0;
                    sign = 1;
                } else if (c == '(') {
                    stack.push(ret);
                    stack.push(sign);
                    ret = 0;
                    sign = 1;
                } else if (c == ')') {
                    ret += number * sign;
                    ret = ret * stack.pop() + stack.pop();
                    number = 0;
                    sign = 1;
                }
            }
            
            if (number != 0) ret += number * sign;
            
            return ret;
        }
    }
    

      

    Analysis:

    Simple iterative solution by identifying character one by one. One important thing is that the input is valid, which means the parenthese are always paired and in order.

    Only 5 possible input we need to pay attention:

    1. digit: it should be one digit from current number.

    2. '+': number is over, we can add the the previous number and start a new number.

    3. '-': same as above.

    4. '(': push the previous result and the sign into the stack, set result to 0, just calculate the new result within the parenthesis.

    5. ')': pop out the top two number from stack, first one is the sign before this pair of parenthesis, second is the temporary reslut before this pair of parenthesis. We add them together.

    Finally if there is only one number, from the above solution, we haven't add the number to the result, so we do a check see if the number is zero.

    Reference:

    https://leetcode.com/problems/basic-calculator/discuss/62361/Iterative-Java-solution-with-stack

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    学习另外一门技术,叫Python
    子报表显示Total Page Count或Page Number
    Insus.NET是Leo Yeung的网名
    C# 以管理员身份运行WinForm程序
    python 里 certifi 库的作用
    CEF中文教程(google chrome浏览器控件) -- CEF简介CEF中文教程(google chrome浏览器控件) -- CEF简介
    CefInitialize崩溃 && Cef白屏
    Chrome设置
    CEF 开启webGl功能
    Qt5.9.1结合CEF开发基于chorm的浏览器(二)
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10804664.html
Copyright © 2020-2023  润新知