您的位置:首页 > 其它

[LeetCode]Basic Calculator

2016-03-30 13:52 387 查看
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.

用堆栈来做,注意处理好字符串的空格,和各种CornerCase。思路不复杂,但是细节要注意。
class Solution {
public:
int calculate(string s) {
stack<int> num;
stack<char> op;
int front = 0;
int next = 0; //记录前一个符号和后一个符号
s = '(' + s + ')';
op.push('(');
for(int i=1; i<s.size(); i++){
if(s[i]==' ') continue; //空格处理跳过
if(s[i]=='+'||s[i]=='-'||s[i]=='('||s[i]==')'){
next = i;
if(!allwhite(s,front,next))//判断两个符号间是否全是空格
num.push(atoi(s.substr(front+1,next-front-1).c_str()));//提取数字
front = next;
op.push(s[i]);
}
if(op.top()==')') // 出栈逻辑
{
op.pop();
int temp = 0;
while(true)
{    if(op.top()=='+'){
int a = num.top();
temp = temp + a;
num.pop();
op.pop();
}
if(op.top()=='-'){
int a = num.top();
num.pop();
temp = temp - a;
op.pop();
}
if(op.top()=='('){
int a = num.top();
temp = temp + a;
num.pop();
num.push(temp);
op.pop();
break;
}
}
}
}
return num.top();
}
bool allwhite(string &s,int i,int j){
if(j==i)
return true;
for(int k=i+1; k<j; k++){
if(s[k]!=' ')
return false;
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: