LeetCode:224.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 .

Example 1:

Input: "1 + 1"
Output: 2

Example 2:

Input: " 2-1 + 2 "
Output: 3

Example 3:

Input: "(1+(4+5+2)-3)+(6+8)"
Output: 23

Note:

You may assume that the given expression is always valid.
Do not use the eval built-in library function.

解题思路 —— 递归求解

从左向右依次计算,当出现括号时,递归地优先计算括号内的算式。

AC 代码

class Solution {
public:
int calculate(string s) {
long long num = 0;
char oper = '+';

for(size_t i = 0; i < s.size(); ++i)
{
if(s[i] >= '0' && s[i] <= '9')
{
long long curNum = 0;
while(i < s.size() && s[i] >= '0' && s[i] <= '9')
{
curNum = curNum*10 + s[i] - '0';
++i;
}
--i;

if(oper == '+') num += curNum;
else if(oper == '-') num -= curNum;
}
else if(s[i] == '(')
{
int j = i;
int lc = 1;
++i;
while(i < s.size() && lc != 0)
{
if(s[i] == '(') ++lc;
else if(s[i] == ')') --lc;
++i;
}

if(oper == '+') num += calculate(s.substr(j+1, i-j-2));
else if(oper == '-') num -= calculate(s.substr(j+1, i-j-2));
--i;
}
else if(s[i] == ' ')
{
continue;
}
else
{
oper = s[i];
}
}

return num;
}
};