LeetCode—227. 基本计算器 II

227. 基本计算器 II

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

整数除法仅保留整数部分。
你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

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

考察重点:计算加减乘除法(栈写法见 224. 基本计算器)

func findNum(nowPos int, s string) (int, int) { //寻找数字:"1+ 211  /     332"	发现数字或者乘除符号后,需要将整个数字字符串搜索完毕,并转为intstart := -1for ; nowPos < len(s); nowPos++ {if start == -1 && s[nowPos] >= '0' && s[nowPos] <= '9' { // start记录数字起始位置(因为可能有空格)start = nowPos}if start != -1 && (s[nowPos] < '0' || s[nowPos] > '9') { // 已经记录了起始位置,并且当前又一次发现非数字符号,停止遍历break}}nowNum, _ := strconv.Atoi(s[start:nowPos]) //将string转为intreturn nowNum, nowPos - 1                  //遍历时,比如"234/1" nowPos会指向/,而下面循环中又会执行i++,导致switch跳过'/'号,所以需要nowPos-1
}/**
"-5 + 11 * 20 / 1"
——> opt变为-1
——> 5 * opt后,将-5压栈
——> opt变为1
——> 11 * opt后,将11压栈
——> 遇到*,弹出11,找到20,11*20后,将220压栈
——> 遇到/,弹出220,找到1,220/1后,将220压栈
——> 结束,遍历栈,结果为[-5,220] 相加得215
*/
func Calculate2(s string) int {res := 0stack := d.NewStack()nowOpt := 1preNum, nowNum := 0, 0for i := 0; i < len(s); i++ {switch s[i] {case ' ':continuecase '+':nowOpt = 1continuecase '-':nowOpt = -1continuecase '*':preNum = (*stack.Pop()).(int) //遇到乘除号,弹出上一个数字,即将乘除号前后的两数字做乘除,并将结果再次压栈nowNum, i = findNum(i, s)stack.Push(preNum * nowNum)continuecase '/':preNum = (*stack.Pop()).(int)nowNum, i = findNum(i, s)stack.Push(preNum / nowNum)continuedefault:nowNum, i = findNum(i, s)stack.Push(nowOpt * nowNum)continue}}for !stack.Empty() {res += (*stack.Pop()).(int)}return res
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GARFIELD@01-31-2005

savage sandwich 转载于:https://www.cnblogs.com/rexhost/archive/2005/01/31/99836.html

js 和 query 获取页面和滚动条的高度

//页面位置及窗口大小 function GetPageSize() {var scrW, scrH; if(window.innerHeight && window.scrollMaxY) { // Mozilla scrW window.innerWidth window.scrollMaxX; scrH window.innerHeight window.scrollMaxY; } else if(document.body.scrollHe…

【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送

公众号&#xff1a;SAP Technical本文作者&#xff1a;matinal原文出处&#xff1a;http://www.cnblogs.com/SAPmatinal/ 原文链接&#xff1a;【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送前言部分 大家可以关注我的公众号&#xff0c;公众号里的排版更好&…

[Mac]一些命令技巧

Git相关 mac下git默认不区分大小写&#xff0c;通过下面脚本可以改变 #!/bin/bash# 让git区分大小写 cd path-of-project git config core.ignorecase false git不会将空文件夹添加到版本控制中&#xff0c;下面脚本可以让空文件夹加到git # 将所有空文件夹添加到git cd path-o…

GARFIELD@02-24-2005

a cat on a ball 转载于:https://www.cnblogs.com/rexhost/archive/2005/02/25/109153.html

LeetCode—229. 求众数 II

229. 求众数 II 题目描述&#xff1a; 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 考察重点&#xff1a;设超过 ⌊ n/3 ⌋ 次的元素有a个&#xff0c;则一定有 ⌊ n/3 ⌋ * a < n。即这种元素至多存在2个。 先用摩尔投票法求出最…

c2c网站源码

c2c网站源码是一套由网畅™(68ws.com)基于PHPMySQL技术的Web电子商务程序。c2c网站源码的主要功能有&#xff1a;采用了缓存更新处理&#xff0c;积木式查询显示&#xff0c;后台HTML模板管理&#xff0c;c2c网站源码首页商品和店铺的自助推荐功能&#xff0c;支持拍卖模式&…

网站总结 和 相关控件 总结

2019独角兽企业重金招聘Python工程师标准>>> 学习篇 https://github.com/Aufree/trip-to-iOS 开源库 http://github.ibireme.com/github/list/ios/ 项目管理和工具 测试&#xff1a;TestFlight 依赖管理&#xff1a;CocoaPods 自动生成推送证书&#xff1a;Gen…

西门子新款A系列手机【ZZ】

linked from http://www.tompda.com/neirong.asp?id809 西门子新款A系列手机   首页 > 新闻资讯 提交 shizhi 2005-2-25  阅读:2739次 10篇评论 西门子公司近日推出了A系列手机&#xff0c;A系列手机作为入门级手机&#xff0c;设计和功能十分简洁和实用。 西门子A70:设…

LeetCode—230. 二叉搜索树中第K小的元素

230. 二叉搜索树中第K小的元素 题目描述&#xff1a; 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 考察重点&#xff1a;中序遍历&#xff0c;借助go多线程实现…

Oracle执行计划相关(待补充)

执行计划并不一定保证是最新的.比如下面很简单的sqlSELECT A.CPCIDEAIDFROM CPCIDEA AWHERE A.CPCGRPID 2001;总是提示全表扫,重新编译cpcgrpid这个索引之后,就OK了.转载于:https://www.cnblogs.com/highriver/archive/2011/05/23/2054317.html

内存区划分;内存分配;堆、栈概念分析;动态内存管理数据结构及程序样例;核心态与用户态...

一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放&#xff0c;若程序员不释放&#xff0c;程序结束时可能由OS回收3.全局区&#xff08;静态区&#xff09;&#xff0c;全局变量和静态变量的存储是放在一块的&#xff0c;初始化的全局变量和静…

Packet for query is too large(mysql写入数据过大)

错误现象&#xff1a;(com.logicaldoc.core.security.dao.HibernateUserDAO: 102) -- Packet for query is too large (1086 > 1024). You can change this value on the server by setting the max_allowed_packet variable.org.hibernate.exception.GenericJDBCException:…

版权的盈利模式

昨天在PDAFANS论坛xuxinyi的“城市引擎”注册问题引起了很多人的讨论&#xff0c;我觉得这盈利模式是一个值得探讨的问题&#xff0c;现在软件在变&#xff0c;就像xuxinyi的“梅花输入法”发展到“城市引擎”一样&#xff0c;从提供功能发展到更多提供服务&#xff0c;.NET、X…

Virtural Box 虚拟ubuntu 修改分辨率

来源 http://www.diybl.com/course/6_system/linux/Linuxjs/2008614/125481.html VirtualBox 在windows XP下虚拟Ubuntu全屏的解决方法 默认安装后声音、网络一切正常&#xff0c;就是不能完全全屏&#xff0c;ubuntu作为客机的分辨率只能调到800600&#xff0c;从网上挖的&am…

LeetCode—236. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先 题目描述&#xff1a; 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的…

Chord算法

转自&#xff1a;http://blog.csdn.net/wangxiaoqin00007/article/details/7374833 虽然网上搜索CHord&#xff0c;一搜一大堆&#xff0c;但大多讲得不太清楚明白。今天发现一篇blog&#xff0c;图文并茂&#xff0c;逻辑清楚且易懂&#xff0c;特意转载收藏。 P2P的一个常见问…

ARP、Tracert、Route 与 NBTStat命令详解

ARP   ARP是一个重要的TCP/IP协议&#xff0c;并且用于确定对应IP地址的网卡物理地址。实用arp命令&#xff0c;我们能够查看本地计算机或另一台计算机的ARP高速缓存中的当前内容。此外&#xff0c;使用arp命令&#xff0c;也可以用人工方式输入静态的网卡物理/IP地址对&…

地籍宗地出图(一)

在ArcGIS中&#xff0c;我们经常需要标注&#xff1b;在地籍处理中&#xff0c;需要承包地出图。具体的出没有可参考的标准。通常软件中的做法有&#xff1a; 第一种&#xff0c;以村组为背景&#xff0c;将某户的承包地选择出来&#xff0c;并标黑。这样的结果&#xff0c;领导…

USACO 3.3.2 Shopping Offers解题报告

写在前面&#xff1a;因为之前没写的C的USACO Training的解题报告太多……所以就不写了&#xff0c;要是想要代码可以联系我&#xff1a;xiedong_1993foxmail.com 这题就是传说中的五维背包&#xff0c;其实写起来难度不大。但是我写的时候可以说是遇到了重重困难。因为我对C的…