1. 程式人生 > >Google面試題專題9 - leetcode224. Basic Calculator

Google面試題專題9 - leetcode224. Basic Calculator

224. Basic Calculator - Hard

百度面試題

題目描述

計算器功能。字串表示式可能包含:(、)、+、-、非負整數和空格。

例子
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

思想
可能的操作如下:
1)如果是數字,更新當前數字num;其餘情況都要重置num=0
2)如果是+/-,更新res = sign * num,並重置num=0,sign=±1;
3)如果是(,後面小括號裡的內容需優先計算。所以暫時把之前的res,sign進棧,並重置res=1,sign=1;
4)如果是),之前的結果出棧,計算整個式子。
解法

class Solution(object):
    def calculate(self, s):
        """
        :type s: str
        :rtype: int
        """
        s = s.strip()
        stack = []
        res = num = 0
        sign = 1
        for c in s:
            if c.isdigit():
                num = num * 10 + ord(c) - 48
            elif
c in '+-': res += sign * num num = 0 sign = 1 if c == '+' else -1 elif c == '(': stack.append(res) stack.append(sign) res = 0 sign = 1 elif c == ')': res +=
sign * num res *= stack.pop() res += stack.pop() num = 0 return res + sign * num