• [LC] 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.
    class Solution(object):
        def calculate(self, s):
            """
            :type s: str
            :rtype: int
            """
            sign = 1
            res = 0
            stack = []
            index = 0
            while index < len(s):
                char = s[index]
                if char.isdigit():
                    num = int(char)
                    while index + 1 < len(s) and s[index + 1].isdigit():
                        num = 10 * num + int(s[index + 1])
                        index += 1
                    res += sign * num
                elif char == '+':
                    sign = 1
                elif char == '-':
                    sign = -1
                elif char == '(':
                    stack.append(res)
                    stack.append(sign)
                    res = 0
                    sign = 1
                elif char == ')':
                    res = stack.pop() * res + stack.pop()
                index += 1
            return res
    class Solution {
        public int calculate(String s) {
            char[] charArr = s.toCharArray();
            LinkedList<Integer> stack = new LinkedList<>();
            int sign = 1;
            int num = 0;
            for (int i = 0; i < charArr.length; i++) {
                char cur = charArr[i];
                if (Character.isDigit(cur)) {
                    int count = cur - '0';
                    while (i + 1 < charArr.length && Character.isDigit(charArr[i + 1])) {
                        // need to use charArr[i + 1]
                        count = 10 * count + charArr[i + 1] - '0';
                        i += 1;
                   }
                    num = num + count * sign;
                } else if (cur == '+') {
                    sign = 1;
                } else if (cur == '-') {
                    sign = -1;
                } else if (cur == '(') {
                    stack.offerFirst(num);
                    stack.offerFirst(sign);
                    num = 0;
                    sign = 1;
                } else if (cur == ')') {
                    num = num * stack.pollFirst() + stack.pollFirst();
                }
            }
            return num;
        }
    }
  • 相关阅读:
    Chrome浏览器与常用插件推荐
    时间戳 转换24小时制
    fis3 开启相对地址
    web手机端禁止滑动,web手机端禁止上下滑动。
    rem的用法
    手机端复制,pc端复制
    ruby 镜像安装
    使用Potree渲染大规模点云-踩坑记录
    移动端真机调试神器-spy-debugger
    手撕Promise.any
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11828694.html
Copyright © 2020-2023  润新知