LeetCode: 227. Basic Calculator II
阿新 • • 發佈:2019-01-29
題目描述
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.
Example 1:
Input: "3+2*2"
Output: 7
Example 2:
Input: " 3/2 "
Output: 1
Example 3:
Input: " 3+5 / 2 "
Output: 5
Note:
- You may assume that the given expression is always valid.
- Do not use the
eval
built-in library function.
解題思路
將單個數字和乘除法作為加法運算的 “項(item)”,每次獲取下一項進行計算。
AC 程式碼
class Solution { private: int Op(char op, int lhv, int rhv) { if(op == '+') return lhv+rhv; else if(op == '-') return lhv-rhv; else if(op == '*') return lhv*rhv; else return lhv/rhv; } // idx, result pair<int, int> nextItem(string str, int beg) { int result = 0; int curNum = 0; char op = '+'; size_t i; size_t pos = str.find_first_of("+-", beg); if(pos == str.npos) pos = str.size(); for(i = beg; i <= pos; ++i) { if(str[i] == ' ') continue; if(i == pos) { result = Op(op, result, curNum); break; } if(str[i] >= '0' && str[i] <= '9') { curNum = curNum*10+str[i]-'0'; } else if(str[i] == '*' || str[i] == '/') { result = Op(op, result, curNum); op = str[i]; curNum = 0; } } return {i, result}; } public: int calculate(string s) { int result = 0; int curNum = 0; int idx = 0; char op = '+'; pair<int, int> curPair{0,0}; while(idx < s.size()) { if(s[idx] == ' ') { ++idx; continue; } if(s[idx] =='+' || s[idx] =='-') { op = s[idx++]; continue; } curPair = nextItem(s, idx); result = Op(op, result, curPair.second); idx = curPair.first; } return result; } };