LeetCode227. Basic Calculator II(思路及python解法)

本文介绍了一个基本计算器的设计与实现,该计算器能解析并计算简单的数学表达式字符串,支持加、减、乘、除运算,以及非负整数输入。通过使用栈数据结构,文章详细解释了如何处理操作符优先级和整数除法的截断问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Implement a basic calculator to evaluate a simple expression string.

The expression string contains only non-negative integers, +-*/ operators and empty spaces . The integer division should truncate toward zero.

Example 1:

Input: "3+2*2"
Output: 7

Example 2:

Input: " 3/2 "
Output: 1

Example 3:

Input: " 3+5 / 2 "
Output: 5

把字符串转为数学公式进行计算。注意排除空格。

首先是获得完整的数字,可以用i.isdigit()或者i in ‘0123456789’来判断i是否是数字。

然后空格跳过。

注意符号对应的时挨着的后面的数字计算方式,所以在最前面添加一个‘+’,使后面每个数字对应正确的符号。

最后再随意添加一个符号,否则不会计算到原字符串中的最后一个符号。

除法需要特别注意,这里python3可运行,python会报错,因为除法取整的方式在python2.X和python3中是不同的。

class Solution:
    def calculate(self, s: str) -> int:
        stack=[]
        num=0
        s+='+'
        pre='+'
        for i in s:
            if i in '0123456789':
                num=num*10+int(i)
            elif i==' ':
                continue
            else:
                if pre=='+':
                    stack.append(num)
                elif pre=='-':
                    stack.append(-num)
                elif pre=='*':
                    prenum=stack.pop()
                    stack.append(prenum*num)
                elif pre=='/':
                    prenum=stack.pop()
                    stack.append(int(prenum/num))
                num=0
                pre=i
        return sum(stack)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值