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 ...
随机推荐
- 应用服务器和Web服务器
如上图所示,绝大部分的公司会采用Apache+tomcat集群(或jetty集群)来部署公司的Web服务, Web服务器和应用服务器关系,先介绍一下我们常说的服务器: Tomcat服务器,是运行ser ...
- MySQL日期处理(笔记)
对于刚学习MySQL的人日期的处理是个大坑. 这里整理了如何处理常见的日期问题. (这只是我在学习过程中关于日期处理方面知识的总结,会有一些错误和片面的地方.) Date 函数 函数 描述 NOW() ...
- SQL Server 的通用分页显示存储过程
建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适 ...
- 设计模式——Spring IoC中用到的模板方法模式
基本概念 什么是模板方法(Template method):父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现. 最大的好处:代码复用,减少重复代码.除了子类要实现的特定方法,其他方法及方法 ...
- NativeScript - JS 构建跨平台的原生 APP
使用 NativeScript,你可以用现有的 JavaScript 和 CSS 技术来编写 iOS.Android 和 Windows Phone 原生移动应用程序.由原生平台的呈现引擎呈现界面而不 ...
- 12款免费的 WordPress 响应式主题下载
最流行的内容管理系统(WordPress)和最流行的网页设计技术(响应式设计)结合会是什么样的呢?下面这个列表收集了12款响应式的 Wordpress 主题,能够带给你不一样的网站体验. 您可能感兴趣 ...
- javascript的switch的使用注意
如果是以下代码: <script> var t_keleyi_com = 65; switch (t_keleyi_com) { case '65': alert("字符串65. ...
- [deviceone开发]-do_Dialog的基本使用示例
一.简介 我们平常使用do_Notification的alert或者confirm都是比较简单弹窗. 更为复杂和个性化的弹窗需要用到do_Dialog, 它可以弹出一个自定义的窗口,窗口里的内容是你自 ...
- pgRouting 2.0 for windows 来了
Postgres 9.2, PostGIS 2.0 and pgRouting 2.0 支持32.64 下载地址: http://winnie.postgis.net/download/window ...
- 奇葩问题:This file could not be checked in because the original version of the file on the server was moved or deleted. A new version of this file has been saved to the server, but your check-in comments were not saved
"This file could not be checked in because the original version of the file on the server was m ...