leetcode-Basic Calculator
来源:互联网 发布:蜂窝移动网络搜索 定位 编辑:程序博客网 时间:2024/05/22 16:49
Question:
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
“1 + 1” = 2
” 2-1 + 2 ” = 3
“(1+(4+5+2)-3)+(6+8)” = 23
Solution:
class Solution {public: int calculate(string s) { char stack1[100000]; int stack2[100000]; int top1 = -1; int top2 = -1; s += '#'; int len = s.size(); for( int i = 0 ; i < len ; i++ ){ switch(s[i]){ case ' ':break; case '(':stack1[++top1] = '(';break; case ')':{ if(stack1[top1] == '('){ top1--; break; } switch(stack1[top1--]){ case '+': stack2[top2-1] = stack2[top2] + stack2[top2-1]; break; case '-': stack2[top2-1] = stack2[top2-1] - stack2[top2]; break; } top2--; top1--; } break; case '+': case '-': case '#': if(top1 >= 0 && stack1[top1] != '('){ switch(stack1[top1]){ case '+': stack2[top2-1] = stack2[top2] + stack2[top2-1]; top2--; break; case '-': stack2[top2-1] = stack2[top2-1] - stack2[top2]; top2--; break; } top1--; } stack1[++top1] = s[i]; break; default: int tmp = s[i] - 48; while(i<len && s[i+1]>='0' && s[i+1]<='9'){ tmp = tmp*10 + s[++i]-48; } stack2[++top2] = tmp; } } return top2==0?stack2[0]:0; }};
总结:
声明两个栈,一个栈存数字,另一个存储操作符,保证栈顶操作符优先级最大。如果栈顶操作符优先级高于将要入栈的操作符,就先将栈顶操作符A出栈,从数据栈中弹出两个数x1,x2,将x1 A x2的结果存于数据栈顶,直至栈顶操作符优先级低于将要入栈的操作符。
遍历完输入表达式后,判断数据栈只有一个数,并且操作符栈为空,否则,输入表达式出错。
操作符优先级高->低:( */ +- ),其中‘)’不入栈,并且遇到栈顶为‘(’时,弹出‘(’。
小技巧:给表达式添加结束符’#‘可以使问题简化。
1 0
- 【LeetCode】Basic Calculator && Basic Calculator II
- LeetCode - Basic Calculator & Basic Calculator II
- Leetcode之Basic Calculator & Basic Calculator II
- [leetcode] Basic Calculator
- Basic Calculator - LeetCode 224
- LeetCode Basic Calculator
- leetcode:Basic Calculator
- [leetcode][math] Basic Calculator
- [LeetCode] Basic Calculator
- Leetcode 224: Basic Calculator
- leetcode 224 Basic Calculator
- [LeetCode] Basic Calculator II
- [leetcode] Basic Calculator II
- [Leetcode] Basic Calculator
- leetcode Basic Calculator
- leetcode Basic Calculator II
- LeetCode-Basic Calculator
- leetcode Basic Calculator 栈
- zybo板运行linux系统过程中的问题整理
- jQuery中map()方法
- 动态规划入门
- 为你的博文构建目录
- Android xformode属性
- leetcode-Basic Calculator
- java解析xml之xstream学习
- 设置当TextView中的文字超过TextView的容量时,用省略号代替
- 现代Web开发需要学习的15大技术
- KNN
- Excel的一些统计函数
- Retrofit
- 大杀器xgboost指南
- 最小花费