题目:

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

Note: Do not use the eval built-in
library function.

Credits:

Special thanks to @ts for adding this problem and creating all test cases.

代码:

class Solution {
public:
int calculate(string s) {
stack<int> st;
int result = 0;
int i = 0;
while(i<s.size())
{
int sum = 0;
if(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
{
while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
{
sum = sum * 10 + s.at(i)-'0';
i++;
}
st.push(sum);
}
else if(i<s.size()&&s.at(i)=='+')
{
st.push((int)s.at(i));
i++;
}
else if(i<s.size()&&s.at(i)=='-')
{
st.push((int)s.at(i));
i++; }
else if(i<s.size()&&s.at(i)=='*')
{
int a = st.top();
st.pop();
int sum1 = 0;
i++;
while(s.at(i)==' ')
{
i++;
}
if(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
{
while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
{
sum1 = sum1 * 10 + s.at(i)-'0';
i++;
}
a*=sum1;
st.push(a);
}
}
else if(i<s.size()&&s.at(i)=='/')
{ int a = st.top();
st.pop();
int sum1 = 0;
i++;
while(s.at(i)==' ')
{
i++;
}
while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
{
sum1 = sum1 * 10 + s.at(i)-'0';
i++;
}
a = (int)(a/sum1);
st.push(a);
}
else
{
i++;
}
}
stack<int> st1;
while(!st.empty())
{
st1.push(st.top());
st.pop();
}
while(!st1.empty())
{
int a = st1.top();
st1.pop();
if(st1.empty())
return a;
else
{
if((char)(st1.top())=='+')
{
st1.pop();
int temp = st1.top()+a;
st1.pop();
st1.push(temp);
}
else if((char)(st1.top())=='-')
{
st1.pop();
int temp = a-st1.top();
st1.pop();
st1.push(temp);
}
}
}
return st1.top();
}
};

方法比较繁琐。。。就这样了。

leetcode_Basic Calculator II的更多相关文章

  1. Basic Calculator,Basic Calculator II

    一.Basic Calculator Total Accepted: 18480 Total Submissions: 94750 Difficulty: Medium Implement a bas ...

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

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

  3. 【LeetCode】227. Basic Calculator II

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

  4. [LeetCode] Basic Calculator & Basic Calculator II

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

  5. LeetCode OJ Basic Calculator II

    Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: strin ...

  6. LeetCode 227. 基本计算器 II(Basic Calculator II)

    227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...

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

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

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

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

  9. Basic Calculator II

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

随机推荐

  1. python文件目录操作大全

    python只获取当前目录下的文件夹及文件名 list = os.listdir(rootdir)#列出目录下的所有文件和目录 for line in list: filepath = os.path ...

  2. HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo

    26 集群使用初步 HDFS的设计思路 l 设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: l 在大数据系统中作用: 为各类分布式 ...

  3. 自己构造用于异步请求的JSON数据

    有时候.serialize()或者.serializeJSON()莫名其妙的不能按照我们的要求将数据序列化. 或者其他什么问题然我们需要自己惊醒JSON数据的构造.因为js对JSON的支持做的比较好, ...

  4. 对redis深入理解

    1.Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet.如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog. ...

  5. Extjs,实现树形结构的总结

    工作总结,用extjs.mybatis.springMVC实现树形显示班级 前台extjs实现树形代码如下: xtype : 'combotree', fieldLabel : '部门名称', nam ...

  6. java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...

  7. PHP——动态随机数

    取1-13随机数 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  8. php模拟动态输出效果

    读取数据库,显示数据 foreach($s as $ss){ echo '同步中 ...<br />'; for( $i = 1 ; $i < 2 ; $i++ ) { //echo ...

  9. SSM,即Spring+SpringMVC+MyBatis三个开源框架的整合框架集。

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...

  10. Maven实战(三)——多模块项目的POM重构

    在本专栏的上一篇文章POM重构之增还是删中.我们讨论了一些简单有用的POM重构技巧,包含重构的前提--持续集成,以及怎样通过加入或者删除内容来提高POM的可读性和构建的稳定性.但在实际的项目中,这些技 ...