#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 返回表达式的值
# @param s string字符串 待计算的表达式
# @return int整型
#
class Solution:
    def solve(self, s: str) -> int:
        # write code here
        st = []  # 辅助栈
        num = ""
        for i in s:

            if i in "(+-*":
                if num != "":
                    st.append(int(num))  # 数字入栈
                    num = ""
                st.append(i)  # 符号入栈
            elif i == ")":
                if num != "":
                    st.append(int(num))  # 数字入栈
                    num = ""
                t = st.pop()
                sth = []  # 辅助栈
                while t != "(":  # 将"("前的所有移到辅助栈,将乘法优先计算
                    if t != "*":
                        sth.append(t)
                    else:
                        a = sth.pop()
                        b = st.pop()
                        sth.append(a * b)
                    t = st.pop()
                # 所有的括号中乘法计算完了再计算加减
                while len(sth) != 1:
                    a = int(sth.pop())
                    c = sth.pop()
                    b = int(sth.pop())
                    if c == "+":
                        sth.append(a + b)
                    if c == "-":
                        sth.append(a - b)
                st.append(sth[0])  # 将结果入栈
            else:
                num = num + i  # 拼接数字
        if num != "":
            st.append(int(num))  # 不带括号的字符串最后一个数字的处理
        st = st[::-1]  # 从最后出栈,数组逆序,便于加减顺序计算
        while len(st) != 1:  # 解决完所有括号的加减乘计算
            a = int(st.pop())
            c = st.pop()
            b = int(st.pop())
            if c == "+":
                st.append(a + b)
            if c == "-":
                st.append(a - b)
            if c == "*":
                st.append(a * b)
        return st[0]


做了前五道题做这个还是错误频出啊...

不过还好最后做出来了!好耶

很多要注意的点:

(10+20*10-6)这样的括号内乘法,要考虑乘法优先计算

1-2-3这样的减法运算只能顺序计算

数字不是个位,要进行拼接