LeetCode—224. 基本计算器(困难)

224. 基本计算器(困难)

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

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

考察重点:使用go建立数据结构——栈。通过栈实现对字符串表达式中括号作用范围的判断。

type Item interface {
}// Stack the stack of items
type Stack struct {Items []Item
}// New Create a new Stack
func NewStack() *Stack {return &Stack{Items: []Item{}}
}// Push adds an Item to the top of the stack
func (s *Stack) Push(t Item) {s.Items = append(s.Items, t)
}// Pop removes an Item from the top of the stack
func (s *Stack) Pop() *Item {item := s.Items[len(s.Items)-1] // 后进先出s.Items = s.Items[0 : len(s.Items)-1]return &item
}// Return an Item from the top of the stack
func (s *Stack) Top() *Item {item := s.Items[len(s.Items)-1] // 后进先出return &item
}
/**
符号之所以要入栈,是因为 1 - (2+3) - 5的这种情况,第一个‘-’只作用于(2+3) 而不作用于5,所以遇到')'就将'-'出栈
1 - (2 + (3 - 4) - 1)
遇到第一个(括号 - 入栈  作用范围(2 + (3 - 4) - 1)
遇到第二个(括号 + 入栈  作用范围(3 - 4)
遇到第一个)括号 + 出栈
遇到第二个)括号 - 出栈
*/
func Calculate(s string) int {res := 0stack := d.NewStack()stack.Push(1)opt := 1for i := 0; i < len(s); {switch s[i] {case ' ':i++case '+':opt = 1 * (*stack.Top()).(int)i++case '-':opt = -1 * (*stack.Top()).(int)i++case '(':stack.Push(opt)i++case ')':stack.Pop()i++default:start := ifor ; i < len(s) && s[i] >= '0' && s[i] <= '9'; i++ {}temp, _ := strconv.Atoi(s[start:i])res += opt * temp}}return res
}

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

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

相关文章

LBS业务资料随记

技术规范&#xff1a;设备技术要求&#xff0c;SP Access接口规范&#xff0c;GIS结构规范、L1接口规范、地图标准规范、终端规范 一个小型的ArcIMS网站 http://www.geo-spatial.net/csk/Downloads/default.aspx 基于位置的业务 。。随着用户移动终端设备的普及&#xff0c;简…

shell 和 || 的短路使用

shell && 和 || 的短路使用 && 和 || 在 shell 中分别表示 and 和  or&#xff0c;和其它语言类似&#xff0c;这两个操作有短路效应。也就是说&#xff0c;当判断式已经确定时&#xff0c;不再继续处理后续表达式。 && 在失败时中断&#xff0c; || …

XiaoKL学Python(C)__future__

__future__ in Python 1. from __future__ import xxxx 这是为了在低版本的python中使用可能在某个高版本python中成为语言标准的特性&#xff0c;从而 在将代码由低版本迁移到高版本的过程中&#xff0c;减少需要做的工作。 这种语句被称为 future_statement 2. future_state…

LeetCode—227. 基本计算器 II

227. 基本计算器 II 题目描述&#xff1a; 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将…

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 的…