欢乐力扣:基本计算器

文章目录


1、题目描述

基本计算器

 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

2、思路

 本人也不太会,看的这个人的讲解视频:bibili.

代码

python 复制代码
class Solution:
    def calculate(self, s: str) -> int:
        ret = 0  # 记录结果
        num = 0  # 记录当前数字
        sign = 1 # 记录当前符号
        for char in s:
            # 如果碰到数字:比如134,则不断更新num的数值
            if char<= '9' and char >= '0': 
                num = num*10 + int(char)     
            # 如果碰到加号或者减号,则更新一遍ret,同时将符号位和num重置;
            elif char == '+':
                ret = ret + num*sign 
                sign = 1 
                num = 0
            elif char == '-':
                ret = ret + num*sign 
                sign = -1
                num = 0 
        return ret+num*sign  

括号

 若包含括号,则需要用到栈:

python 复制代码
class Solution:
    def calculate(self, s: str) -> int:
        ret = 0  # 记录结果
        num = 0  # 记录当前数字
        sign = 1 # 记录当前符号
        stack = []  # 记录括号
        for char in s:
            # 如果碰到数字:比如134,则不断更新num的数值
            if char<= '9' and char >= '0': 
                num = num*10 + int(char)  
            # 如果碰到加号或者减号,则更新一遍ret,同时将符号位和num重置;
            elif char == '+':
                ret = ret + num*sign 
                sign = 1 
                num = 0
            elif char == '-':
                ret = ret + num*sign 
                sign = -1
                num = 0 
            # 若碰到左括号,则入栈res和当前符号:
            elif char == '(':
                stack.append(ret)
                stack.append(sign)
                num = 0
                sign = 1 
                ret = 0      # 千万记得这里吧ret也需要置为0,否则就累加了。
            elif char == ')':
                ret = ret + num*sign
                num  = 0 
                sign = 1
                # 更新ret的符号位
                ret *= stack[-1]
                stack.pop()
                # 更新ret的值
                ret += stack[-1]
                stack.pop()
        return ret+num*sign   # 返回最终的值
相关推荐
过期动态14 小时前
【LeetCode 热题 100】三数之和
java·数据结构·算法·leetcode·职场和发展·排序算法
逻辑君14 小时前
Foresight研究报告【20260010】
人工智能·算法·机器学习
weixin_4684668514 小时前
大语言模型原理新手入门指南
人工智能·python·算法·语言模型·自然语言处理·transformer·注意力机制
z2005093014 小时前
今日算法(回溯找IP,加检测)
算法·leetcode
sheeta199814 小时前
LeetCode 补拙笔记 日期:2026.05.29 题目:1559. 二维网格图中探测环
笔记·算法·leetcode
罗超驿14 小时前
10.滑动窗口解决:无重复字符的最长子串 | LeetCode 3 Java 题解
java·算法·leetcode·面试
罗超驿14 小时前
8.【LeetCode 18】四数之和 —— Java 排序 + 双指针解法详解
算法·leetcode·职场和发展
菜菜的顾清寒14 小时前
HOT100力扣(40) 动态规划-爬楼梯
算法·leetcode·动态规划
m沐沐14 小时前
【机器学习】聚类算法-K-means聚类
人工智能·python·算法·机器学习·pycharm·kmeans·聚类
z落落14 小时前
C# Dictionary 字典集合+数组、List、Dictionary 三者终极对比
算法