leetcode227.基本计算器ii

实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
在这里插入图片描述
分析:直接法,更具运算法则,先计算乘除法, 在计算加减法。

class Solution(object):
    def calculate(self, s):
        """
        :type s: str
        :rtype: int
        eg: a = " 3+5 / 2 "
        """
        #将字符串放到栈中,数字变为int类型,字符不变。
        s = s.replace(""," ")
        num, tmp = '',[]
        for i in s:
        	if i in "+-*/":
        		tmp.append(int(num))
        		tmp.append(i)
        		num = ''
        	else:
        		num += i 
        tmp.append(int(num))
        if len(tmp) == 1:
        	return tmp[0]
        #先计算乘除法
        stack, i = [],0
        while i < len(tmp):
        	stack.append(i)
        	if tmp[i] in "*/":
        		v = stack[-2] * tmp[i+1] if tmp[i] == '*' else stack[-2] // tmp[i+1]
        		stack = stack[:-2]
        		stack.append(v)
        		i += 1
        #后计算加减法
        res = [stack[0]]
        for i in range(1, len(stack)-1):
        	if stack[i] == '+':
        		res.append(stack[i+1])
        	if stack[i] == '-':
        		res.append(-stack[i+1])
        return sum(res)
        	
        	
        		        		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值