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

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# 题解 一、题目 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)&#xff0c;计算其结果。 表达式仅包含非负整数&#xff0c;&#xff0c; - &#xff0c;*&#xff0c;/ 四种运算符和空格 。 整数除法仅保留整数部分。 示例 …...

15篇MyBatis-Plus系列集合篇「值得收藏学习」

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…...

C#入门(6): 结构体、ref struct

文章目录 定义结构体实例化结构体结构体的值类型特性结构体和类的区别限制ref structref return C# 中的结构体&#xff08;Struct&#xff09;是一种值类型数据结构&#xff0c;用于封装不同或相同类型的数据成一个单一的实体。结构体非常适合用来表示轻量级的对象&#xff0c…...

Java shp 转 GeoJson

文章目录 1. 依赖安装1.1 配置软件源1.2 引入依赖 2. 功能实现3. 参考链接 1. 依赖安装 1.1 配置软件源 在项目 pom.xml 添加, maven 的 settings.xml 配置的源&#xff0c;mirrorOf 不能是 *,不然安装不上 <project>...<repositories><repository><id…...

shadow复习之planar shadow

planar shadow 通常来说 shadow都是画一个map 这个map有个很大的问题&#xff0c;那就是size有问题 你希望有很高的精度&#xff0c;就必定要用大size的图片&#xff0c;这显然是不太妙的 那么这里就出现一个取巧的法子&#xff0c;如果你只考虑投影到平面上&#xff0c;光源是…...

计算机视觉的应用17-利用CrowdCountNet模型解决人群数量计算问题(pytorch搭建模型)

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用17-利用CrowdCountNet模型解决人群数量计算问题(pytorch搭建模型)。本篇文章&#xff0c;我将向大家展示如何使用CrowdCountNet这个神奇的工具&#xff0c;以及它是如何利用深度学习技术来解决复杂…...

源启容器平台KubeGien 打造云原生转型的破浪之舰

云原生是应用上云的标准路径&#xff0c;也是未来发展大的趋势。如何将业务平滑过渡到云上&#xff1f;怎样应对上云期间的各项挑战呢&#xff1f;中电金信基于金融级数字底座“源启”打造了一款非常稳定可靠、多云异构、安全可控、开放灵活的容器平台产品——源启容器平台Kube…...

斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语,还有批量梯度下降法、随机梯度下降法 SGD 以及它们的相关推导,还有正态方程)

假设函数定义 假设函数&#xff0c;猜一个 x->y 的类型&#xff0c;比如 y ax b&#xff0c;随后监督学习的任务就是找到误差最低的 a 和 b 参数 有时候我们可以定义 x0 1&#xff0c;来让假设函数的整个表达式一致统一 如上图是机器学习中的一些术语 额外的符号&#xf…...

【腾讯云云上实验室-向量数据库】TAI时代的数据枢纽-向量数据库 VectorDB

一、向量数据库的发展历程和时代机遇 回顾向量数据库的发展历程&#xff1a; 2012年开始&#xff0c;深度神经网络的发展催生了向量数据库的发展&#xff1b;2015年至2016年&#xff0c;Google和微软发布了标志性的论文&#xff1b;2017年&#xff0c;Facebook开源了Faiss框架…...

掌握深度学习利器——TensorFlow 2.x实战应用与进阶

掌握深度学习利器——TensorFlow 2.x实战应用与进阶 摘要&#xff1a;随着人工智能技术的飞速发展&#xff0c;深度学习已成为当下最热门的领域之一。作为深度学习领域的重要工具&#xff0c;TensorFlow 2.x 备受关注。本文将通过介绍TensorFlow 2.x的基本概念和特性&#xff…...

MySQL 之多版本并发控制 MVCC

MySQL 之多版本并发控制 MVCC 1、MVCC 中的两种读取方式1.1、快照读1.2、当前读 2、MVCC实现原理之 ReadView2.1、隐藏字段2.2、ReadView2.3、读已提交和可重复读隔离级别下&#xff0c;产生 ReadView 时机的区别 3、MVCC 解决幻读4、总结 MVCC&#xff08;多版本并发控制&…...

优步让一切人工智能化

优步(Uber)的商业模式建立在对数据的颠覆性使用上--通过将双方智能手机的位置数据关联起来&#xff0c;将出租车司机与乘客配对。这意味着&#xff0c;它可以比传统出租车公司更快地安排司机去接乘客&#xff0c;极大地冲击了传统出租车公司的业务。 优步自成立以来&#xff0…...

DeepMind发布新模型Mirasol3B:更高效处理音频、视频数据

Google DeepMind日前悄然宣布了其人工智能研究的重大进展&#xff0c;推出了一款名为“Mirasol3B”的新型自回归模型&#xff0c;旨在提升对长视频输入的理解能力。该新模型展示了一种颠覆性的多模态学习方法&#xff0c;以更综合和高效的方式处理音频、视频和文本数据。 Googl…...

键盘方向键移动当前选中的table单元格,并可以输入内容

有类似于这样的表格&#xff0c;用的<table>标签。原本要在单元格的文本框里面输入内容&#xff0c;需要用鼠标一个一个去点以获取焦点&#xff0c;现在需要不用鼠标选中&#xff0c;直接用键盘的上下左右来移动当前正在输入的单元格文本框。 const currentCell React.u…...

(八)、基于 LangChain 实现大模型应用程序开发 | 基于知识库的个性化问答 (检索 Retrieval)

检索增强生成&#xff08;RAG&#xff09;的整体工作流程如下&#xff1a; 在构建检索增强生成 (RAG) 系统时&#xff0c;信息检索是核心环节。检索是指根据用户的问题去向量数据库中搜索与问题相关的文档内容&#xff0c;当我们访问和查询向量数据库时可能会运用到如下几种技术…...

高效案例检索工具,Alpha案例库智慧检索成为律师检索工具首选

“工欲善其事&#xff0c;必先利其器。”当今&#xff0c;律界同仁需要权衡的问题早已不是“要不要”使用法律科技&#xff0c;而是如何高质量、高效率地使用法律科技工具。在业内人士看来&#xff0c;随着人工智能技术的不断发展&#xff0c;法律行业科技化将成为不可逆转的趋…...

stable diffusion十七种controlnet详细使用方法总结

个人网站&#xff1a;https://tianfeng.space 前言 最近不知道发点什么&#xff0c;做个controlnet 使用方法总结好了&#xff0c;如果你们对所有controlnet用法&#xff0c;可能了解但是有点模糊&#xff0c;希望能对你们有用。 一、SD controlnet 我统一下其他参数&#…...

【机器学习基础】对数几率回归(logistic回归)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…...

团结引擎已全面支持 OpenHarmony 操作系统

Unity 中国宣布与开放原子开源基金会达成平台级战略合作。 据称团结引擎已全面支持 OpenHarmony 操作系统&#xff0c;同时将为 OpenHarmony 生态快速带来更多高品质游戏与实时 3D 内容。Unity 称现在用户可以 “在 OpenHarmony 框架中感受到与安卓和 iOS 同样丝滑的游戏体验”…...

【brpc学习案例实践一】rpc服务构造基本流程

前言 在crpc框架中&#xff0c;brpc简直越用越爽&#xff0c;平时工作中也常用到brpc&#xff0c;一直没来得及总结&#xff0c;抽空写点&#xff0c;也供自己查阅用。下附几个常用学习地址&#xff1a; brpc官网开源地址&#xff1a; https://github.com/luozesong/brpc/blob…...

Neosegment库:面向七段数码管式NeoPixel的嵌入式驱动框架

1. Neosegment库概述&#xff1a;面向七段数码管式NeoPixel模块的嵌入式驱动框架Neosegment是一个专为Neosegment Digit模块设计的Arduino兼容嵌入式驱动库&#xff0c;其核心目标是将WS281x/SK6812系列智能LED的底层时序控制与七段数码管&#xff08;7-segment display&#x…...

【JupyterLab实战】构建跨平台AI算力监控仪表盘

1. 为什么需要跨平台AI算力监控&#xff1f; 在AI开发过程中&#xff0c;我们经常遇到这样的场景&#xff1a;模型训练到一半突然卡死&#xff0c;却不知道是GPU内存爆了还是CPU瓶颈&#xff1b;多卡并行时某张卡莫名其妙跑不满&#xff1b;昇腾芯片的温度报警频繁触发却找不到…...

ECharts折线图入门学习:从基础到实战的完整指南

引言 折线图是数据可视化中最常用的图表类型之一&#xff0c;特别适合展示数据随时间变化的趋势。ECharts作为一款功能强大的JavaScript可视化库&#xff0c;提供了丰富的配置选项和交互功能&#xff0c;能够轻松创建出专业、美观的折线图。本文将带领大家从零开始学习ECharts折…...

彩灯广告屏PLC控制S7-200程序:包含梯形图、接线图、原理图及IO分配与组态画面详解

彩灯广告屏的PLC控制S7-200程序 程序 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面上周刚帮客户搞定了一套户外彩灯广告屏的PLC控制项目&#xff0c;用的还是经典的S7-200&#xff0c;本来以为老架构玩不出花…...

终极指南:30分钟打造你的首个ESP32 AI智能硬件项目

终极指南&#xff1a;30分钟打造你的首个ESP32 AI智能硬件项目 【免费下载链接】xiaozhi-esp32 An MCP-based chatbot | 一个基于MCP的聊天机器人 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 还在为嵌入式AI开发的高门槛而烦恼吗&#xff1f;物联…...

Polars 2.0插件生态爆发(2024唯一官方认证清洗套件清单)

第一章&#xff1a;Polars 2.0插件生态爆发&#xff08;2024唯一官方认证清洗套件清单&#xff09; 随着 Polars 2.0 的正式发布&#xff0c;其插件系统完成重大重构&#xff0c;首次开放官方插件注册与签名认证机制。截至 2024 年第三季度&#xff0c;Polars 核心团队已通过 …...

微信好友检测神器:一键识别谁删了你,轻松管理社交圈

微信好友检测神器&#xff1a;一键识别谁删了你&#xff0c;轻松管理社交圈 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFr…...

魔兽争霸3终极优化指南:如何解锁180fps帧率限制并解决现代硬件兼容性问题

魔兽争霸3终极优化指南&#xff1a;如何解锁180fps帧率限制并解决现代硬件兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为经…...

【数值分析】线性方程组求解的MATLAB实战:从高斯消元到追赶法

1. 线性方程组求解的数值方法概述 在工程计算和科学研究中&#xff0c;线性方程组的求解是一个基础而重要的问题。想象一下&#xff0c;你正在设计一座桥梁&#xff0c;需要计算各个节点的受力情况&#xff1b;或者你在分析电路时&#xff0c;需要确定各个支路的电流大小。这些…...

AI+Python 双驱动计量经济学:从多源数据处理到 SCI 论文--多源数据处理、机器学习预测及复杂因果识别全流程实战随机森林模型核心技术

为什么你自学了这么久&#xff0c;还是做不出成果&#xff1f;很多科研人做计量经济学研究&#xff0c;最大的问题不是不够努力&#xff0c;而是没有一套完整的全链条体系&#xff1a;只学了模型操作&#xff0c;却不懂底层理论&#xff0c;换个研究问题、换个数据集就不会做了…...