zoukankan      html  css  js  c++  java
  • [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;
        }
    }
  • 相关阅读:
    H264源码分析(四)
    矩阵在编程中的一个小应用
    android listview 三种适配器设置
    Android SoundPool 的使用以及原理分析
    poj 2728 Desert King(最优比例生成树)
    MySQL 查询结果以百分比显示
    Android Application
    飘逸的python
    CSS教程:div垂直居中的N种方法[转]
    HQL: Hibernate查询语言
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11828694.html
Copyright © 2011-2022 走看看