LeetCode#227.Basic Calculator II
题目
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers,
+,-,*,/operators and empty spaces. The integer division should truncate toward zero.You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7
" 3/2 " = 1
" 3+5 / 2 " = 5
大意:一个不包含括号,包含空格的计算器
思路
采用堆栈实现。从头到尾扫描字符串:
- 如果是数字,作为当前的各位,之前的数左移一位作为高位。
- 如果是符号,若是加减法,将数字乘以符号压入堆栈。
- 如果是乘除法,从堆栈弹出一个数,与当前数相乘除压回堆栈。
注意,使用后缀表达式,先读出两个数在读出符号,顺序应为:
- 前一个符号的初始值为+(因为读出第一个符号时,对第一个数字的操作一定是压入堆栈,同+的情况)
- 读出一个数字,压入堆栈
- 读出一个符号
- 在读出一个数字
- 根据前一个符号决定当前操作
- 操作完成后将刚读出的符号记为前一个符号。
这样就相当于完成了普通表达式到后缀表达式的转换。
代码
class Solution {
public:
int calculate(string s) {
stack<int> myStack;
char sign = '+';
int num = ,res=;
for (int i = ; i < s.size(); i++){
if (isdigit(s[i]))
num = num * + s[i] - '';
if (((!isdigit(s[i])) && (!isspace(s[i])))||(i==s.size()-)){
if (sign == '+')
myStack.push(num);
if (sign == '-')
myStack.push(num*-);
if (sign == '*'){
num = myStack.top()*num;
myStack.pop();
myStack.push(num);
}
if (sign == '/'){
num = myStack.top() / num;
myStack.pop();
myStack.push(num);
}
sign = s[i];
num = ;
}
}
while (!myStack.empty()){
res += myStack.top();
myStack.pop();
}
return res;
}
};
其他
关于”ctype.h”

图片来自维基百科<https://zh.wikipedia.org/wiki/Ctype.h>
LeetCode#227.Basic Calculator II的更多相关文章
- [LeetCode] 227. Basic Calculator II 基本计算器 II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- [LeetCode] 227. Basic Calculator II 基本计算器之二
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- Java for LeetCode 227 Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- (medium)LeetCode 227.Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- 【LeetCode】227. Basic Calculator II 解题报告(Python)
[LeetCode]227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ...
- leetcode 224. Basic Calculator 、227. Basic Calculator II
这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...
- 【LeetCode】227. Basic Calculator II
Basic Calculator II Implement a basic calculator to evaluate a simple expression string. The express ...
- LeetCode OJ Basic Calculator II
Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: strin ...
- Leetcode solution 227: Basic Calculator II
Problem Statement Implement a basic calculator to evaluate a simple expression string. The expressio ...
随机推荐
- python 学习笔记9(面向对象)
面向过程.函数式.面向对象 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象(Object Oriented Programmin ...
- Java经典实例:纪元秒和本地日期时间互换
Java版本:1.8开始 import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; /** ...
- linux常用命令之文件权限
CHGRP chgrp – change group ownership,改变组别的所有权 用法 chgrp 组别名 文件\目录名 选项 -R (recursive)递归改变,将目录下所有的文件和目 ...
- 经典网页设计:20个与众不同的国外 HTML5 网站
大家都都知道, HTML5 具备所有最新的技术和功能,帮助我们创造平滑过渡,花式图像滑块和动画.如果你正在考虑使用HTML5 来设计自己的网站,那么这个集合能够帮助你. 在过去的10年里,网页设计师使 ...
- HTML中tr标签设置边框不显示的解决办法
今天在操作表格的时候发现设置表格中行的边框没有显示,然后自己新建了一个表格发现确实不显示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...
- 深入源码分析使用jQuery连续发起jsonp请求失败的原因
jQuery的 jsonp 大家应该是十分熟悉了.曾遇到过这样的需求1.希望请求几个相似的内容添加到页面2.请求的内容一定时间内是固定不变的,希望做个缓存. 于是脑子一拍写下了类似这样的代码 for( ...
- SAP/SD - 做SD你要知道的透明表
一.客户主数据基本数据放在KNA1里:公司代码放在KNB1里:销售视图放在KNVV里:合作伙伴放在KNVP里:二.信用主数据KNKK里有信贷限额.应收总额.特别往来:S066里是未清订单值:S067里 ...
- atitit.数据验证--db数据库数据验证约束
atitit.数据验证--db数据库数据验证约束 1. 为了加强账户数据金额的安全性,需要增加验证字段..1 2. 创建帐户1 3. 更改账户2 4. ---code3 5. --fini4 1. 为 ...
- HttpClient示例
<%@page import="com.sun.xml.ws.client.BindingProviderProperties"%> <%@page conten ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q13-Q15)
Question 13 You are designing a SharePoint 2010 site. You need to design the site to meet all the fo ...