题解 | #表达式求值#

表达式求值

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

class Solution:
    def solve(self , s: str) -> int:
        # write code here
        stack = []
        res = 0
        num= 0
        i = 0
        sign = '+'

        while i < len(s):
            # 处理空格
            if s[i] == ' ':
                i += 1
                continue
            
            if s[i] == '(':
                end = i + 1
                lens = 1
                # 处理括号
                while lens > 0:
                    if s[end] == '(': 
                        lens += 1
                    if s[end] == ')':
                        lens -= 1
                    end += 1
                
                num = self.solve(s[i+1:end-1])
                i = end - 1
                continue
				
			# 获取数字
            if '0' <= s[i] <= '9':
                num = num*10 + int(s[i]) 
            
            # 获取符号并计算
            if not '0' <= s[i] <= '9' or i == len(s) - 1:
                if sign == '+':
                    stack.append(num)
                elif sign == '-':
                    stack.append(-num)
                elif sign == '*':
                    stack.append(stack.pop()*num)
                num = 0
                sign = s[i]
            i += 1

		# 获得最终结果
        while stack:
            res += stack.pop()

        return res

解题思路

  • 先处理空格;
  • 再处理括号;
  • 获取数字;
  • 获取符号并计算;
  • 最后将栈内元素全部加起来,得到最终的结果。

复杂度

时间复杂度和空间复杂度都为O(N)。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务