leetcode 224. 基本计算器 python

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

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,564评论 1 32
  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 5,743评论 1 22
  • 1.埋点是做什么的 2.如何进行埋点 3.埋点方案的设计 近期常被问到这个问题,我担心我的答案会将一些天真烂漫的孩...
    lxg阅读 2,302评论 0 1
  • 每一个季节都会有不一样的故事,遇到不一样的人,发生不一样的事,它们有时会在心里,有时会在记忆里,有时会在遗忘的地方...
    百合花之飒阅读 350评论 4 6
  • 图片发自简书App](http://upload-images.jianshu.io/upload_images/...
    史诺比馨蔚阅读 295评论 0 0

友情链接更多精彩内容