原题链接https://leetcode.com/problems/basic-calculator/
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
题很简单,遇到括号就进入一下层计算。
class Solution {
public:
int calculate(string s) {
int pos = 0;
string t = "";
for (int i = 0; i < s.length(); ++i)if (s[i] != ' ')t += s[i];
return mycal(t, pos);
}
int mycal(string& s, int& pos)
{
int tmp = 0, last = 0, ans = 0;
for (; pos < s.length(); ++pos)
{
if (s[pos] == '(')
{
pos++;
ans += mycal(s, pos) * (last == 0 ? 1 : -1);
}
else if (s[pos] == '+')
{
ans += tmp * (last == 0 ? 1 : -1);
tmp = 0;
last = 0;
}
else if (s[pos] == '-')
{
ans += tmp * (last == 0 ? 1: -1);
tmp = 0;
last = 1;
}
else if (s[pos] == ')')
return ans += tmp * (last == 0 ? 1 : -1);
else tmp = tmp * 10 + (s[pos] - '0');
}
return ans + tmp * (last == 0 ? 1 : -1);
}
};