实现一个基本的计算器来计算一个简单的字符串表达式。

字符串表达式仅包含非负整数,+, - ,*,/四种运算符和空格 。 整数除法仅保留整数部分。

你可以假定所给定的表达式总是有效的。

一些例子:

"3+2*2" = 7
" 3/2 " = 1
" 3+5 / 2 " = 5
注意: 不要使用eval 内置的函数库。

详见:https://leetcode.com/problems/basic-calculator-ii/description/

Java实现:

class Solution {
public int calculate(String s) {
if(s == null || s.length() == 0){
return -1;
} char sign = '+';
int cur = 0;
Stack<Integer> stk = new Stack<Integer>();
for(int i = 0; i<s.length(); i++){
char c=s.charAt(i);
if(Character.isDigit(c)){
cur = cur*10 + c-'0';
} if((!Character.isDigit(c) && c!=' ') || i==s.length()-1){
if(sign == '-'){
stk.push(-cur);
}else if(sign == '+'){
stk.push(cur);
}else if(sign == '*'){
stk.push(stk.pop()*cur);
}else if(sign == '/'){
stk.push(stk.pop()/cur);
}
sign = c;
cur = 0;
}
} int res = 0;
for(int num : stk){
res += num;
}
return res;
}
}

C++实现:

class Solution {
public:
int calculate(string s) {
int size=s.size();
if(size==0||s.empty())
{
return 0;
}
int res=0,d=0;
char sign='+';
stack<int> stk;
for(int i=0;i<size;++i)
{
if(s[i]>='0')
{
d=d*10+s[i]-'0';
}
if(s[i]<'0'&&s[i]!=' '||i==size-1)
{
if(sign=='+')
{
stk.push(d);
}
if(sign=='-')
{
stk.push(-d);
}
if(sign=='*'||sign=='/')
{
int tmp=sign=='*'?stk.top()*d:stk.top()/d;
stk.pop();
stk.push(tmp);
}
sign=s[i];
d=0;
}
}
while(!stk.empty())
{
res+=stk.top();
stk.pop();
}
return res;
}
};

参考:https://www.cnblogs.com/grandyang/p/4601208.html

227 Basic Calculator II 基本计算器II的更多相关文章

  1. leetcode 224. Basic Calculator 、227. Basic Calculator II

    这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...

  2. 【LeetCode】227. Basic Calculator II 解题报告(Python)

    [LeetCode]227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ...

  3. [LeetCode] 227. Basic Calculator II 基本计算器 II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  4. 227. Basic Calculator II 无括号版本计算器

    [抄题]: Implement a basic calculator to evaluate a simple expression string. The expression string con ...

  5. 【LeetCode】227. Basic Calculator II

    Basic Calculator II Implement a basic calculator to evaluate a simple expression string. The express ...

  6. 224. Basic Calculator + 227. Basic Calculator II

    ▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz. ▶ 自己的全 ...

  7. LeetCode#227.Basic Calculator II

    题目 Implement a basic calculator to evaluate a simple expression string. The expression string contai ...

  8. [LeetCode] 227. Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  9. Java for LeetCode 227 Basic Calculator II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  10. 227. Basic Calculator II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

随机推荐

  1. Android - 渠道号(vender)

    渠道号(vender) 本文地址: http://blog.csdn.net/caroline_wendy Android的apk公布,须要统计各个渠道(vendor)的激活数.就能够使用vendor ...

  2. Sql Server 导入还有一个数据库中的表数据

    在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,此处以SQL Server导入表数据为例.阐述一下: 1.打开SQL Server Management ...

  3. CASE函数 sql server——分组查询(方法和思想) ref和out 一般处理程序结合反射技术统一执行客户端请求 遍历查询结果集,update数据 HBuilder设置APP状态栏

    CASE函数   作用: 可以将查询结果集的某一列的字段值进行替换 它可以生成一个新列 相当于switch...case和 if..else 使用语法: case 表达式/字段 when 值 then ...

  4. 数据库建表参考(SQL Server)

      (1).字段设置为Not Null+Default Value.原因:减少三值判断,可为Null的字段要多判断null:另外,定长字段为null也占空间,变长字段为空字符串也是不占空间,所以设置成 ...

  5. [IT学习]学习Python过程需要记忆的一些坑

    1.列表的引用和复制 A byte of Python 中文4.05c版本85页 单纯对列表进行引用,则列表指向同一对象. 如果你需要复制一份全新的拷贝,则需要通过切片操作. 2.仅有一个元素的元组, ...

  6. apt-pkg

    1 什么是apt-pkg python的apt库,可以做apt可以做的任何事情. 2 apt_pkg.parse_depends(depends, strip_multiarch=True) 这里的d ...

  7. android8 Notification

     界面Layout:  customnotice.xml <?xml version="1.0" encoding="utf-8"?> <Li ...

  8. mysql--DML--视图,索引,事务,字符集,函数

    Mysql中,表/列可以改名,database不能改名. phpMyAdmin似乎有这功能? 他是建新库,把所有表复制到新库,再删旧库完成的. 删除一个数据库: drop database 数据库名; ...

  9. leetcode 664. Strange Printer

    There is a strange printer with the following two special requirements: The printer can only print a ...

  10. Buildroot构建指南——根文件系统(Rootfs)【转】

    本文转载自; 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Buildroot构建指南——根文件系统(Rootfs) Buildroot的Rootfs构建流程有一个大 ...