当前位置: 首页 > news >正文

227. 基本计算器 II Python

文章目录

  • 一、题目描述
      • 示例 1
      • 示例 2
      • 示例 3
  • 二、代码
  • 三、解题思路


一、题目描述

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

整数除法仅保留整数部分。

你可以假设给定的表达式总是有效的。所有中间结果将在 [-2^31, 2^31 - 1]的范围内。

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

示例 1

输入:s = "3+2*2"
输出:7

示例 2

输入:s = " 3/2 "
输出:1

示例 3

输入:s = " 3+5 / 2 "
输出:5

提示:
1 <= s.length <= 3 * 10^5
s 由整数和算符 ('+', '-', '*', '/') 组成,中间由一些空格隔开
s 表示一个 有效表达式
表达式中的所有整数都是非负整数,且在范围 [0, 2^31 - 1] 内
题目数据保证答案是一个 32-bit 整数

二、代码

代码如下:

class Solution:def calculate(self, s: str) -> int:def is_operator(char):return char in "+-*/^"def infix_to_postfix(expression):def precedence(operator):precedence_dict = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}return precedence_dict.get(operator, 0)def infix_to_postfix_internal(expression_tokens):output = []operator_stack = []for token in expression_tokens:if token.isnumeric():  # 如果是数字,直接添加到输出output.append(token)elif token == '(':  # 如果是左括号,压入栈operator_stack.append(token)elif token == ')':  # 如果是右括号,将栈顶的操作符弹出并添加到输出,直到遇到左括号while operator_stack and operator_stack[-1] != '(':output.append(operator_stack.pop())if operator_stack and operator_stack[-1] == '(':operator_stack.pop()elif is_operator(token):  # 如果是操作符,处理操作符的优先级while (operator_stack andoperator_stack[-1] != '(' andprecedence(token) <= precedence(operator_stack[-1])):output.append(operator_stack.pop())operator_stack.append(token)while operator_stack:  # 将栈中剩余的操作符全部添加到输出output.append(operator_stack.pop())return ' '.join(output)# 将输入的表达式字符串按空格分割成标记列表expression_tokens = expression.split()# 调用内部函数进行转换postfix_expression = infix_to_postfix_internal(expression_tokens)return postfix_expressiondef add_spaces_to_infix(expression):operators = "+-*/^"result = []for char in expression:if char in operators or char in "()":result.append(f" {char} ")else:result.append(char)return ''.join(result)infix_expression = s.replace(" ", "")print(infix_expression)spaced_infix_expression = add_spaces_to_infix(infix_expression)print(spaced_infix_expression)postfix_expression = infix_to_postfix(spaced_infix_expression)print("中缀表达式:", spaced_infix_expression)print("后缀表达式:", postfix_expression)stack = []for token in postfix_expression.split():if token.isnumeric():stack.append(int(token))elif is_operator(token):operand2 = stack.pop()operand1 = stack.pop()if token == '+':result = operand1 + operand2elif token == '-':result = operand1 - operand2elif token == '*':result = operand1 * operand2elif token == '/':if operand2 == 0:raise ValueError("Division by zero")result = int(operand1 / operand2)stack.append(result)print(int(stack[0]))return int(stack[0])

三、解题思路

本题本质是要求通过字符串来计算表达式,且不能直接使用eval方法对字符串直接进行转化计算。本题解题思路为:将字符串(前缀表达式)转化为后缀表达式,然后通过计算后缀表达式得到结果。
① 因为涉及到字符可能会出现2位数及其以上的情况,如果之间转化为后缀表达式,则会导致数字连接到一块,所以需要对数字和运算符进行分隔,将表达式转化为如下格式:“12+4/5” => “12 + 4 / 5”
② 转化为后缀表达式,当遇到2位数及以上的数字时,需要将其看做是一个数,用空格分隔不同数。例如:
中缀表达式: 12 + 4 / 5
后缀表达式: 12 4 5 / +
不同的数之间用空格分开
③ 计算后缀表达式,找第一个运算符,向左找最近的2个数进行计算,重复这一过程,最后得到一个值返回即可。

相关文章:

227. 基本计算器 II Python

文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-2^31, 2^31 - 1]的范围内…...

python中字典常用函数

字典常用函数 cmp(dict1,dict2) &#xff08;已删除&#xff0c;直接用>,<,即可&#xff09; 如果两个字典的元素相同返回0&#xff0c;如果字典dict1大于字典dict2返回1&#xff0c;如果字典dict1小于字典dict2返回-1。 先比较字典的长度&#xff0c;然后比较键&#x…...

leetcode88合并两个有序数组

题目&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&…...

Ceph入门到精通-Nginx 大量请求 延迟优化

优化nginx以处理大量请求并减少延迟可以通过以下几种方法实现&#xff1a; 调整worker_processes和worker_connections参数&#xff1a;增加worker_processes值可以增加nginx的进程数量&#xff0c;提高并发处理能力。增加worker_connections参数的值可以增加每个worker进程可…...

Vulnstack----5、ATTCK红队评估实战靶场五

文章目录 一 环境搭建二 外网渗透三 内网信息收集3.1 本机信息收集3.2 域内信息收集 四 横向移动4.1 路由转发和代理通道4.2 抓取域用户密码4.3 使用Psexec登录域控4.4 3389远程登录 五、痕迹清理 一 环境搭建 1、项目地址 http://vulnstack.qiyuanxuetang.net/vuln/detail/7/ …...

QT 5.8

QT与Qt Creator&#xff0c;前者是框架&#xff0c;类似与MFC&#xff0c;而后者是QT的编译器&#xff0c;也可以使用Visual studio编辑&#xff0c;编译需要其他的 Index of /new_archive/qt/5.8/5.8.0...

AIGC+思维导图:提升你的学习与工作效率的「神器」

目录 一、产品简介 二、功能介绍 2.1 AI一句话生成思维导图 2.2百万模版免费用 2.3分屏视图&#xff0c;一屏读写 2.4团队空间&#xff0c;多人协作 2.5 云端跨平台化 2.6 免费够用&#xff0c;会员功能更强大 2.7 支持多种格式的导入导出 三、使用教程 3.1 使用AI…...

javaScript:DOM元素的获取(静态/动态获取)

目录 一.dom元素获取的意义与使用场景 使用场景&#xff08;绝大多数js操作都需要dom操作&#xff09; 总结/疑问解答&#xff01; 二.DOM元素获取的常用方法&#xff08;重点&#xff09; 获取dom元素&#xff08;动态&#xff09; document.gerElementbyId() docume…...

数据结构前言

一、什么是数据结构&#xff1f; 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 上面是百度百科的定义&#xff0c;通俗的来讲数据结构就是数据元素集合与数据元素集合或者数据元素与数据元素之间的组成形式。 举个…...

Docker基于alpine带glibc的小型容器image

由于程序是C写的&#xff0c;gc编译&#xff0c;找了几个容器&#xff0c;生成比较小的是debianslim和ubuntu&#xff0c;生成后的大小分别为88MB&#xff0c;和91MB&#xff0c;还是太大了&#xff0c;于是想起一些小型容器如busybox或者alpine自己装glibc&#xff0c;但是试了…...

Nginx教程

Nginx教程 01-Nginx简介02-windows安装Nginx03-Nginx目录结构04-Linux安装Nginx05-linux下源码安装nginx06-linux下nginx配置07-在docker中安装nginx08-源码安装和yum安装的区别09-Nginx运行组和运行用户10-卸载nginx11-nginx的基本原理和架构12-nginx是如何处理请求的13-nginx…...

直播预约|哪吒汽车岳文强:OEM和Tier1如何有效对接网络安全需求

信息安全是一个防护市场。如果数字化程度低&#xff0c;数据量不够&#xff0c;对外接口少&#xff0c;攻击成本高&#xff0c;所获利益少&#xff0c;自然就没有什么攻击&#xff0c;车厂因此也不需要在防护上花费太多成本。所以此前尽管说得热闹&#xff0c;但并没有太多真实…...

hiveserver2经常挂断的原因

hiveserver2经常挂断的原因 HiveServer2 经常挂断可能有多种原因&#xff0c;以下是一些可能导致挂断的常见原因&#xff1a; 资源不足&#xff1a;HiveServer2 需要足够的内存和 CPU 资源来处理查询请求。如果资源不足&#xff0c;可能会导致 HiveServer2 挂断。请确保在配置…...

openeuler 23.03 安装mysql 8.X

遇到一堆问题&#xff1a;直接从mysql官下载&#xff0c;都不行。下列是失败的&#xff1a; mysql80-community-release-el8-1.noarch.rpm mysql-8.0.34-1.el8.x86_64.rpm-bundle.tar mysql-8.1.0-1.el9.x86_64.rpm-bundle.tar 后来想从openeuler下载应该靠谱&#xff1a;ht…...

网络安全—0基础学习笔记(黑客)

一、前言 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解决. …...

react HashRouter 与 BrowserRouter 的区别及使用场景

一、简介 在单页面应用中&#xff0c;如何在切换页面后&#xff0c;不刷新浏览器呢&#xff1f;为了解决这个问题&#xff0c;有两种方法&#xff0c;就是hash路由模式、history路由模式&#xff0c;而 react router 的两种路由就是使用这两种路由模式。 二、区别 HashRouter…...

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

https://www.cnblogs.com/henjay724/p/13770137.html 大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计。 在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中&#xff0c;痞…...

多目标应用:基于多目标向日葵优化算法(MOSFO)的微电网多目标优化调度MATLAB

一、微网系统运行优化模型 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标向日葵优化算法 多目标向日葵优化算法&#xff08;Multi-objective sunflower optimization&#xff0c;MOS…...

智能安全科技,Vatee万腾为您服务

在智能科技的引领下&#xff0c;Vatee万腾将为您点亮投资之路&#xff0c;助您在金融市场中抓住机遇&#xff0c;实现财务目标。作为一家融合科技与投资的先锋平台&#xff0c;Vatee万腾致力于为投资者提供智能化的投资方案和支持。 Vatee万腾以其先进的智能科技为基础&#xf…...

Scala中的类型检查和转换,以及泛型,scala泛型的协变和逆变

Scala中的类型检查和转换&#xff0c;以及泛型 类型检查和转换 说明 &#xff08;1&#xff09; obj.isInstanceOf[T]&#xff1a;判断 obj 是不是T 类型。 &#xff08;2&#xff09; obj.asInstanceOf[T]&#xff1a;将 obj 强转成 T 类型。 &#xff08;3&#xff09; cla…...

实现鼠标滚轮在容器滚动到底部后无缝过渡到页面滚动

本文介绍如何通过 javascript 检测固定高度溢出容器的滚动边界&#xff0c;在用户滚至底部时立即触发页面滚动&#xff0c;消除原生行为中约1秒的延迟等待&#xff0c;实现平滑、无中断的滚动接力。 本文介绍如何通过 javascript 检测固定高度溢出容器的滚动边界&#xff…...

三步掌握Windows Cleaner:彻底解决C盘空间不足的智能清理方案

三步掌握Windows Cleaner&#xff1a;彻底解决C盘空间不足的智能清理方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows系统设…...

谷歌Gemini API新层级:机遇与挑战并存

谷歌为Gemini API添加Flex和Priority层级&#xff0c;可根据工作负载分配任务。同时发布Gemma 4。新层级虽简化开发工作&#xff0c;但也引发受监管行业担忧&#xff0c;对企业AI战略有重要意义。新层级助力开发者谷歌为Gemini API新增Flex Inference和Priority Inference层级&…...

三步解锁:突破限制的浏览器插件全攻略

三步解锁&#xff1a;突破限制的浏览器插件全攻略 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 在当今数字化办公环境中&#xff0c;许多用户面临着…...

ERPC 多区域 Solana RPC 基础设施架构:Bundle Standard方案动态扩展与全球端点部署实践

概述 ERPC 近期对其 Bundle Standard 方案进行了扩展升级&#xff0c;支持按持有凭证数量动态分配多个独立方案实例。这一机制使开发者能够将 Solana RPC、Geyser gRPC 和 Shredstream 端点灵活部署到全球多个区域&#xff0c;同时满足开发环境与生产环境分离的需求。 本文将…...

如何用QPdf构建现代化Qt桌面PDF应用:技术实现与性能优化

如何用QPdf构建现代化Qt桌面PDF应用&#xff1a;技术实现与性能优化 【免费下载链接】qpdf PDF viewer widget for Qt 项目地址: https://gitcode.com/gh_mirrors/qpd/qpdf 在桌面应用开发中&#xff0c;PDF文档处理一直是技术难点。传统方案如QtPdf虽然稳定&#xff0c…...

7大核心优势!D3KeyHelper暗黑3智能宏工具全面解析:从手动操作到自动化体验的升级之路

7大核心优势&#xff01;D3KeyHelper暗黑3智能宏工具全面解析&#xff1a;从手动操作到自动化体验的升级之路 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelp…...

实战演练:基于快马平台生成电商全流程自动化测试并与Jenkins集成

今天想和大家分享一个最近用InsCode(快马)平台完成的电商自动化测试实战项目。这个项目模拟了真实电商平台的核心业务流程&#xff0c;从用户注册登录到完成支付的全流程测试&#xff0c;特别适合需要快速搭建自动化测试体系的小伙伴参考。 项目背景与设计思路 电商系统的稳定…...

如何用Python技术永久备份你的QQ空间数字记忆?

如何用Python技术永久备份你的QQ空间数字记忆&#xff1f; 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字化时代&#xff0c;我们的社交记忆正在悄然消失。你是否曾试图找回多年…...

DeepSeek kubernetes-1.35.3/api/api-rules/sample_apiserver_violation_exceptions.list 源码分析

我来分析 Kubernetes API 规则文件 sample_apiserver_violation_exceptions.list。这个文件是 Kubernetes API 合规性检查的一部分&#xff0c;用于管理 API 规则违规的例外情况。 文件概述 该文件位于 Kubernetes 源码的 api/api-rules/ 目录下&#xff0c;用于记录 API 规则检…...