题解 | #计算器(二)#

计算器(二)

https://www.nowcoder.com/practice/a9c170bfaf7349e3acb475d786ab1c7d

左程云大神的Java代码,抄过来改成Python版本的。一开始用的list,超时了,改成deque,顺利通过。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return int整型
#
from collections import deque
class Solution:
    def calculate(self , s: str) -> int:
        # write code here
        dd = deque()
        cur = 0
        i = 0
        while i <len(s):
            if s[i] >='0' and s[i] <='9':
                cur = cur *10 +int(s[i])
                i += 1
            else:
                self.addNum(dd,cur,s[i])
                i += 1
                cur = 0
        self.addNum(dd,cur,'&')
        return self.getAns(dd)

    def addNum(self,dd,num,op):
        if len(dd) == 0:
            dd.append(num)
            dd.append(op)
        elif dd[-1] == '*' or dd[-1] == '/':
            top = dd.pop()
            pre = dd.pop()
            num = pre*num if top == '*' else pre/num
            dd.append(num)
            dd.append(op)
        else:
            dd.append(num)
            dd.append(op)

    def getAns(self,dd):
        ans = int(dd.popleft())
        while len(dd) > 1:
            op = dd.popleft()
            num = int(dd.popleft())
            ans =ans+ num if op == '+' else ans-num
        return ans

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务