[LeetCode] 224. Basic Calculator @ python

一.题目:
实现一个基本的计算器,输入为包含"(",")","+","-"," "的字符串,输出运算结果.
二.解题思路:
这种题肯定是用栈实现,一般建立两个栈(数字栈和符号栈),有以下几种情况:
(1)对于数字,注意连续几位都是数字;
(2)对于符号,注意符号的优先级
代码如下:

class Solution(object):
    def calculate(self, s):
        """
        :type s: str
        :rtype: int
        """
        num_stack = []
        sign_stack = []
        for i in range(len(s)):
            if s[i].isdigit():
                if num_stack == []:
                    num_stack.append(int(s[i]))
                elif s[i-1].isdigit():
                    num_stack[-1] = 10*num_stack[-1]+int(s[i])
                else:
                    num_stack.append(int(s[i]))
                
            elif s[i] == " ":
                continue
                
            elif (s[i] == "+" or s[i] == "-"):
                if sign_stack == [] or sign_stack[-1] == "(":
                    sign_stack.append(s[i])
                else:
                    a = num_stack.pop()
                    b = num_stack.pop()
                    num_stack.append(b+a if sign_stack.pop() == "+" else b-a )
                    sign_stack.append(s[i])

            elif s[i] == "(":
                sign_stack.append(s[i])
            else:
                if sign_stack[-1] == "(":
                    sign_stack.pop()
                else:
                    a = num_stack.pop()
                    b = num_stack.pop()
                    num_stack.append(b+a if sign_stack.pop() == "+" else b-a )
                    sign_stack.pop()
        if len(num_stack) == 1:
            return num_stack[0]
        else:
            a = num_stack.pop()
            b = num_stack.pop()
            return b+a if sign_stack.pop() == "+" else b-a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值