leetcode Basic Calculator
来源:互联网 发布:淘宝联盟手机app 编辑:程序博客网 时间:2024/06/08 11:58
原题链接:https://leetcode.com/problems/basic-calculator/
Description
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
Note: Do not use the eval built-in library function.
表达式计算。。
class ExpCalc {private: string ret; stack<char> op; stack<int> num; inline void erase() { ret = ""; while (!op.empty()) op.pop(); while (!num.empty()) num.pop(); } inline int calc(int d1, int d2, char ch) { int val = 0; switch (ch) { case '+': val = d1 + d2; break; case '-': val = d2 - d1; break; } return val; }public: ExpCalc() { erase(); } ~ExpCalc() { erase(); } inline void InfixToPostfix(const string src) { int n = src.length(); for (int i = 0; i < n;) { if (' ' == src[i] || '=' == src[i]) { i++; continue; } if ('(' == src[i]) op.push(src[i++]); if (')' == src[i]) { while (op.top() != '(') { ret += op.top(); ret += ' '; op.pop(); } op.pop(); i++; } else if ('-' == src[i] || '+' == src[i]) { while (!op.empty() && ('-' == op.top() || '+' == op.top())) { ret += op.top(); ret += ' '; op.pop(); } op.push(src[i++]); } else { while (isdigit(src[i])) { ret += src[i++]; } ret += ' '; } } while (!op.empty()) { ret += op.top(); ret += ' '; op.pop(); } ret += '='; } inline int PostfixCalc() { int n = ret.length(); for (int i = 0; i < n;) { if (' ' == ret[i] || '=' == ret[i]) { i++; continue; } if ('-' == ret[i] || '+' == ret[i]) { int d1 = num.top(); num.pop(); int d2 = num.top(); num.pop(); num.push(calc(d1, d2, ret[i++])); } else if (isdigit(ret[i])) { int x = 0; while (isdigit(ret[i])) { x = x * 10 + ret[i++] - '0'; } num.push(x); } } return num.top(); }};class Solution {public: int calculate(string s) { if (s.empty()) return 0; calc = new ExpCalc; calc->InfixToPostfix(s); int ans = calc->PostfixCalc(); return ans; }private: ExpCalc *calc;};
0 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 栈
- linux驱动之看门狗
- hibernate中的Query查询和criteria查询的区别
- LeetCode 28 : Implement strStr() (Java)
- PHP账号密码HashPassword加密方式破解代码实例
- Redis: Jedis 源代码剖析2- 发布者/订阅者模式剖析
- leetcode Basic Calculator
- ubuntu中的大小写
- jQuery插件——表单验证(jquery.validate.js)
- Coderforce 444cDZY Loves Colors(线段树)
- 南邮2015年程序设计周_个人股票信息管理系统
- 症状:可以上网,可以上QQ,不能登陆360安全卫士,360浏览器无法同步,有道词典等无法登陆,无法查询。
- maven项目打包为含依赖的可执行jar
- 向量模板
- leetcode Kth Largest Element in an Array