LeetCode 面试题 16.26. 计算器
文章目录
- 一、题目
- 二、C# 题解
一、题目
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+2*2”
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数
eval。
点击此处跳转题目。
二、C# 题解
首先将中缀表达式转换为后缀表达式,然后计算后缀表达式:
public class Solution {public int Calculate(string s) {ArrayList post = new ArrayList(); // 后缀表达式Stack<char> opStk = new Stack<char>(); // 操作符栈Stack<int> numStk = new Stack<int>(); // 操作数栈int num = 0; // 存储每次扫描的数字/* 生成后缀表达式 post */foreach (char c in s) {if (char.IsNumber(c)) num = num * 10 + c - '0'; // 碰见操作数else if (c != ' ') { // 碰见操作符post.Add(num);num = 0;while (opStk.Count != 0 && OpPriority(opStk.Peek(), c) >= 0) // 将优先级不低于 c 的操作符弹入 postpost.Add(opStk.Pop());opStk.Push(c); // c 进栈}}post.Add(num); // 最后一个操作数进栈while (opStk.Count != 0) post.Add(opStk.Pop()); // 剩余操作符进栈/* 计算后缀表达式 post */foreach (object o in post) {if (o is char c) {// 每次取出两个操作数int n2 = numStk.Pop();int n1 = numStk.Pop();// 计算结果,压入栈内int result = c switch {'+' => n1 + n2,'-' => n1 - n2,'*' => n1 * n2,'/' => n1 / n2,_ => 0};numStk.Push(result);}else numStk.Push((int)o);}return numStk.Pop();}// 比较 c1 和 c2 的优先级// c1 > = < c2 分别返回 1 0 -1public int OpPriority(char c1, char c2) => c1 switch {'*' or '/' when c2 is '*' or '/' => 0,'*' or '/' => 1,'+' or '-' when c2 is '+' or '-' => 0,'+' or '-' => -1,};
}
- 时间:68 ms,击败 71.43% 使用 C# 的用户
- 内存:44.35 MB,击败 28.57% 使用 C# 的用户
对于本题,由于只有两个优先级的操作符,因此可以简化操作:
public class Solution {public int Calculate(string s) {Stack<int> numStk = new Stack<int>();int ans = 0, num = 0;char preOp = '+'; // 上次的操作符for (int i = 0; i < s.Length; i++) {if (char.IsNumber(s[i])) num = num * 10 + s[i] - '0';if (!char.IsNumber(s[i]) && s[i] != ' ' || i == s.Length - 1) { // 遇见操作符或者到达结尾switch (preOp) { // 依据上一个操作符计算结果放入 numStk 中case '+':numStk.Push(num);break;case '-':numStk.Push(-num);break;case '*':numStk.Push(numStk.Pop() * num);break;case '/':numStk.Push(numStk.Pop() / num);break;}num = 0;preOp = s[i];}}while (numStk.Count != 0) ans += numStk.Pop(); // 结果累加return ans;}
}
- 时间:56 ms,击败 100.00% 使用 C# 的用户
- 内存:37.93 MB,击败 57.14% 使用 C# 的用户
相关文章:
LeetCode 面试题 16.26. 计算器
文章目录 一、题目二、C# 题解 一、题目 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。 表达式仅包含非负整数,, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。 示例 …...
15篇MyBatis-Plus系列集合篇「值得收藏学习」
历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…...
C#入门(6): 结构体、ref struct
文章目录 定义结构体实例化结构体结构体的值类型特性结构体和类的区别限制ref structref return C# 中的结构体(Struct)是一种值类型数据结构,用于封装不同或相同类型的数据成一个单一的实体。结构体非常适合用来表示轻量级的对象,…...
Java shp 转 GeoJson
文章目录 1. 依赖安装1.1 配置软件源1.2 引入依赖 2. 功能实现3. 参考链接 1. 依赖安装 1.1 配置软件源 在项目 pom.xml 添加, maven 的 settings.xml 配置的源,mirrorOf 不能是 *,不然安装不上 <project>...<repositories><repository><id…...
shadow复习之planar shadow
planar shadow 通常来说 shadow都是画一个map 这个map有个很大的问题,那就是size有问题 你希望有很高的精度,就必定要用大size的图片,这显然是不太妙的 那么这里就出现一个取巧的法子,如果你只考虑投影到平面上,光源是…...
计算机视觉的应用17-利用CrowdCountNet模型解决人群数量计算问题(pytorch搭建模型)
大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用17-利用CrowdCountNet模型解决人群数量计算问题(pytorch搭建模型)。本篇文章,我将向大家展示如何使用CrowdCountNet这个神奇的工具,以及它是如何利用深度学习技术来解决复杂…...
源启容器平台KubeGien 打造云原生转型的破浪之舰
云原生是应用上云的标准路径,也是未来发展大的趋势。如何将业务平滑过渡到云上?怎样应对上云期间的各项挑战呢?中电金信基于金融级数字底座“源启”打造了一款非常稳定可靠、多云异构、安全可控、开放灵活的容器平台产品——源启容器平台Kube…...
斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语,还有批量梯度下降法、随机梯度下降法 SGD 以及它们的相关推导,还有正态方程)
假设函数定义 假设函数,猜一个 x->y 的类型,比如 y ax b,随后监督学习的任务就是找到误差最低的 a 和 b 参数 有时候我们可以定义 x0 1,来让假设函数的整个表达式一致统一 如上图是机器学习中的一些术语 额外的符号…...
【腾讯云云上实验室-向量数据库】TAI时代的数据枢纽-向量数据库 VectorDB
一、向量数据库的发展历程和时代机遇 回顾向量数据库的发展历程: 2012年开始,深度神经网络的发展催生了向量数据库的发展;2015年至2016年,Google和微软发布了标志性的论文;2017年,Facebook开源了Faiss框架…...
掌握深度学习利器——TensorFlow 2.x实战应用与进阶
掌握深度学习利器——TensorFlow 2.x实战应用与进阶 摘要:随着人工智能技术的飞速发展,深度学习已成为当下最热门的领域之一。作为深度学习领域的重要工具,TensorFlow 2.x 备受关注。本文将通过介绍TensorFlow 2.x的基本概念和特性ÿ…...
MySQL 之多版本并发控制 MVCC
MySQL 之多版本并发控制 MVCC 1、MVCC 中的两种读取方式1.1、快照读1.2、当前读 2、MVCC实现原理之 ReadView2.1、隐藏字段2.2、ReadView2.3、读已提交和可重复读隔离级别下,产生 ReadView 时机的区别 3、MVCC 解决幻读4、总结 MVCC(多版本并发控制&…...
优步让一切人工智能化
优步(Uber)的商业模式建立在对数据的颠覆性使用上--通过将双方智能手机的位置数据关联起来,将出租车司机与乘客配对。这意味着,它可以比传统出租车公司更快地安排司机去接乘客,极大地冲击了传统出租车公司的业务。 优步自成立以来࿰…...
DeepMind发布新模型Mirasol3B:更高效处理音频、视频数据
Google DeepMind日前悄然宣布了其人工智能研究的重大进展,推出了一款名为“Mirasol3B”的新型自回归模型,旨在提升对长视频输入的理解能力。该新模型展示了一种颠覆性的多模态学习方法,以更综合和高效的方式处理音频、视频和文本数据。 Googl…...
键盘方向键移动当前选中的table单元格,并可以输入内容
有类似于这样的表格,用的<table>标签。原本要在单元格的文本框里面输入内容,需要用鼠标一个一个去点以获取焦点,现在需要不用鼠标选中,直接用键盘的上下左右来移动当前正在输入的单元格文本框。 const currentCell React.u…...
(八)、基于 LangChain 实现大模型应用程序开发 | 基于知识库的个性化问答 (检索 Retrieval)
检索增强生成(RAG)的整体工作流程如下: 在构建检索增强生成 (RAG) 系统时,信息检索是核心环节。检索是指根据用户的问题去向量数据库中搜索与问题相关的文档内容,当我们访问和查询向量数据库时可能会运用到如下几种技术…...
高效案例检索工具,Alpha案例库智慧检索成为律师检索工具首选
“工欲善其事,必先利其器。”当今,律界同仁需要权衡的问题早已不是“要不要”使用法律科技,而是如何高质量、高效率地使用法律科技工具。在业内人士看来,随着人工智能技术的不断发展,法律行业科技化将成为不可逆转的趋…...
stable diffusion十七种controlnet详细使用方法总结
个人网站:https://tianfeng.space 前言 最近不知道发点什么,做个controlnet 使用方法总结好了,如果你们对所有controlnet用法,可能了解但是有点模糊,希望能对你们有用。 一、SD controlnet 我统一下其他参数&#…...
【机器学习基础】对数几率回归(logistic回归)
🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…...
团结引擎已全面支持 OpenHarmony 操作系统
Unity 中国宣布与开放原子开源基金会达成平台级战略合作。 据称团结引擎已全面支持 OpenHarmony 操作系统,同时将为 OpenHarmony 生态快速带来更多高品质游戏与实时 3D 内容。Unity 称现在用户可以 “在 OpenHarmony 框架中感受到与安卓和 iOS 同样丝滑的游戏体验”…...
【brpc学习案例实践一】rpc服务构造基本流程
前言 在crpc框架中,brpc简直越用越爽,平时工作中也常用到brpc,一直没来得及总结,抽空写点,也供自己查阅用。下附几个常用学习地址: brpc官网开源地址: https://github.com/luozesong/brpc/blob…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
