leetcode刷题报告之 计算器大冲关 basic calculator I II III

计算器大冲关
第一关加减乘除
核心,两头添两个+
思想是 把operation记住,然后现存数字是operation后面的数字,乘除的时候就可以pop出符号前面的数字,再和现存的数字做运算。
还有个巧妙的地方在于把减法当负号。最后就是sum(stack)里所有东西
另外
说下 python的 int() 取整和 //
Int取整简单粗暴就是截断,小数直接丢掉,就会呈现出,正数向下取,负数向上取。
5//2 = 2
-3 // 2 = -1
暴力截断即可

//全都是向下取整,取出来的数字就是变小。比如
5 // 2 = 2
-3//2 = -2

class Solution:
    def calculate(self, s: str) -> int:
        def operate(num, op):
            if op == "*":
                stack.append(num * stack.pop()) 
            if op == "/":
                stack.append(int(stack.pop() / num))
            if op == "-":
                stack.append(-1 * num)
            if op == "+":
                stack.append(num)
        n = len(s)    
        i = 0
        stack = []
        cur = 0
        operation = "+"
        for char in s+"+":
            if  char.isdigit():
                cur = cur*10 + int(char)
            elif char in ["-", "+", "*", "/"]:
                operate(cur, operation)
                cur = 0
                operation = char
                
        return sum(stack)

第二关 带括号的加减:
这里括号的不同之处,在于要把前括号前面的op存进stack。因为括号里面的式子算好之后得找到括号前面的op,不存下来是会被冲掉的。 遇到后括号就要清算了,把到那个运算符的内容都算好。但清算之前记得还得做一次 operate函数,别漏了后括号前面的数字。 怎么去判断是不是一个 op而不是数字,可以用 isinstance(x,int)

class Solution:
    def calculate(self, s: str) -> int:
        def operate(num, op):
            if op == "*":
                stack.append(num * stack.pop()) 
            if op == "/":
                stack.append(int(stack.pop() / num))
            if op == "-":
                stack.append(-1 * num)
            if op == "+":
                stack.append(num)

        stack = []
        op = "+"
        cur = 0
        for char in s+"+":
            if char.isdigit():
                cur = cur * 10 + int(char)
            elif char == "(":
                stack.append(op)
                op = "+"
            elif char in ["+","-","*","/",")"]:
                operate(cur , op)

                if char == ")":
                    sum_in_bracket = 0 
                    while isinstance(stack[-1], int):
                        sum_in_bracket += stack.pop()
                    op = stack.pop()
                    cur = sum_in_bracket
                else:       
                    cur = 0
                    op = char
            else:
                continue        

        return sum(stack)

第三关,继续升级,加减乘除,括号都有
突然发现 上一题已经把加减乘除做了,一不小心 把这个条件写成了
elif char in [“+”,“-”,“*”,“/”,“)”]:
其实上一题 没有乘除的要求,只要elif char in [“+”,“-”,“)”]:


版权声明:本文为weixin_41147129原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。