题目:

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. dp之01背包hdu3466(带限制的,当你所拥有的钱数大于某个限定值时才可以购买该物品)

    题意:买东西,每个东西有三个特征值,p代表价格,q代表你手中钱必须不低于q才能买这个物品,v代表得到的价值. mark:又是变种01背包,每做一个变种的,就是一种提高.. 按照q - p以由大到小的顺 ...

  2. Matlab三维绘图

    三维绘图 1 三维绘图指令 类 别 指 令 说 明 网状图 mesh, ezmesh 绘制立体网状图 meshc, ezmeshc 绘制带有等高线的网状图 meshz 绘制带有“围裙”的网状图 曲面图 ...

  3. jQuery分页小插件

    源码如下: $.fn.pager = function (pagerInfo) { var recordCount = this.size(); if (recordCount <= pager ...

  4. 【Properties】Properties的load方法

    Properties的load方法其实就是传进去一个输入流,字节流或者字符流,字节流利用InputStreamReader转化为字符流, 然后字符流用BufferedReader包装,Buffered ...

  5. ubuntu samba 安装

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,是一种在局域网上共享文件和打印机的一种通信协议. 1. 安装 sudo apt-get install samba samba-c ...

  6. Hadoop是原Yahoo的Doug Cutting根据Google发布的学术论文研究而来

    Hadoop是原Yahoo的Doug Cutting根据Google发布的学术论文研究而来.Doug Cutting给这个Project起了个名字,就叫Hadoop. Doug Cutting在Clo ...

  7. Unity5.X 新版AssetBundle打包控制

    一.什么是AssetBundle 估计很多人只知道Unity的模型之类的东西可以导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载出来用.那么AssetBund ...

  8. java---springMVC与strutsMVC的区别

    spring mvc与struts的区别 标签: strutsspringmvcservletactiontomcat 2011-11-24 17:34 24205人阅读 评论(6) 收藏 举报  分 ...

  9. 学习:erlang的term反序列化,string转换为term

    一. string_to_term(String) ->    case erl_scan:string(String++".") of        {ok, Tokens ...

  10. 【DeepLearning】一些资料

    记录下,有空研究. http://nlp.stanford.edu/projects/DeepLearningInNaturalLanguageProcessing.shtml http://nlp. ...