leetcode

leetcode 224. 基本计算器 python

2019-04-11  本文已影响0人  DaydayHoliday

使用栈的栈(准确地说是双向队列的双向队列)。记录一下

class Solution(object):
    def calculate(self, s):
        def add(x,y):
            return x+y
        def minus(x,y):
            return x-y
        outer_stack=[]
        inner_stack=[]
        num=None
        for c in s:
            if c.isdigit():
                num = 0 if num is None else num
                num = 10 * num + int(c)
                continue
            if c=='(':
                if inner_stack!='':
                    outer_stack.append(inner_stack)
                inner_stack=[]
                continue
            if c=='+':
                if num is not None:
                    inner_stack.append(num)
                num=None
                inner_stack.append(add)
                if len(inner_stack)>=3:
                    x=inner_stack.pop(0)
                    ope=inner_stack.pop(0)
                    y=inner_stack.pop(0)
                    inner_stack.insert(0,ope(x,y))
                continue
            if c=='-':
                if num is not None:
                    inner_stack.append(num)
                num=None
                inner_stack.append(minus)
                if len(inner_stack)>=3:
                    x=inner_stack.pop(0)
                    ope=inner_stack.pop(0)
                    y=inner_stack.pop(0)
                    inner_stack.insert(0,ope(x,y))
            if c==')':
                if num is not None:
                    inner_stack.append(num)
                num=None                
                x=inner_stack.pop(0)
                while len(inner_stack)>0:
                    ope=inner_stack.pop(0)
                    y=inner_stack.pop(0)
                    x=ope(x,y)
                if len(outer_stack)>0:
                    inner_stack=outer_stack.pop()
                    inner_stack.append(x)
        if num is not None:
            inner_stack.append(num)
        while len(inner_stack)>0 or len(outer_stack)>0:
            x=inner_stack.pop(0)
            while len(inner_stack)>0:
                ope=inner_stack.pop(0)
                y=inner_stack.pop(0)
                x=ope(x,y)
            if len(outer_stack)>0:
                inner_stack=outer_stack.pop()
                inner_stack.append(x)
        return x
上一篇下一篇

猜你喜欢

热点阅读