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

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

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

一些例子:

"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数据存储】- File

    个人学习整理.如有不足之处,请不吝不吝赐教. 转载请注明:@CSU-Max 读写本应用程序数据目录中的文件        此种方法读写的文件在/data/data/<应用程序包名>中   ...

  2. Camera 模组

    http://wenku.baidu.com/view/89d8c21014791711cc7917d5.html http://wenku.baidu.com/view/0cec54d5c1c708 ...

  3. 五------Jsp九大内置对象。

    Jsp九大内置对象,当中最基本的是前五个对象. 5-1 out对象 out对象是JSPWriter类的实例.是向client输出内容经常使用的对象. out对象经常使用的方法例如以下: 1.out.p ...

  4. LruCache & DiskLruCache

    在用户界面(UI)加载一张图片时很简单,然而,如果你需要加载多张较大的图像,事情就会变得更加复杂,.在许多情况下(如与像的ListView GridView或ViewPager的组件),屏幕上的图片的 ...

  5. HTML的高富帅

    1,前端的内容(组成部分有以下三部分) HTML                         CSS                                JS 裸体的人 穿上好看的衣服 ...

  6. wpa_supplicant介绍【转】

    本文转载自:https://zhuanlan.zhihu.com/p/24246712 一.什么是wpa_spplicant wpa_supplicant本是开源项目源码,被谷歌修改后加入Androi ...

  7. YTU 2439: C++习题 复数类--重载运算符+

    2439: C++习题 复数类--重载运算符+ 时间限制: 1 Sec  内存限制: 128 MB 提交: 1022  解决: 669 题目描述 定义一个复数类Complex,重载运算符"+ ...

  8. Android开发之自定义对话框

    由于系统自带的对话框不好看,于是本人就自定义了一个对话框,以后有类似的就可以直接使用啦.先上效果图: 1,布局文件dialog_clear_normal.xml <?xml version=&q ...

  9. Lucene dvd dvm文件便是docvalues文件——就是针对field value的列存储

    public final class Lucene54DocValuesFormat extends DocValuesFormat Lucene 5.4 DocValues format. Enco ...

  10. bzoj1296 [SCOI2009]粉刷匠——背包

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1296 对于不同木板之间,最终统计答案时做一个分组背包即可: 而要进行分组背包,就需要知道每个 ...