每日一题:基本计算器(LeetCode 224)
题目
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
示例 1:
- 输入:s = "1 + 1"
- 输出:2
示例 2:
- 输入:s = " 2-1 + 2 "
- 输出:3
示例 3:
- 输入::s = "(1+(4+5+2)-3)+(6+8)"
- 输出:23
提示:
- 1 <= s.length <= 3 * 105
- s 由数字、'+'、'-'、'('、')'、和 ' ' 组成
- s 表示一个有效的表达式
解答
class Solution {
public:
int calculate(string s) {
//记录表达式的计算结果
int nRes = 0;
//记录运算符号,'+'为1,'-'为-1
int nSigned = 1;
//记录当前数字的值
int nVal = 0;
stack<int> stk;
for(int i = 0; i < s.size(); i++)
{
int num = s[i] - '0';
if(s[i] >= '0' && s[i] <= '9')
{
//是数字则累加
nVal = nVal*10 + num;
}
else if(s[i] == '+')
{
//计算+之前的表达式结果
nRes = nRes + nSigned*nVal;
//重置val为0
nVal = 0;
nSigned = 1;
}
else if(s[i] == '-')
{
//计算-之前的表达式结果
nRes = nRes + nSigned*nVal;
//重置val为0
nVal = 0;
nSigned = -1;
}
else if(s[i] == '(')
{
//遇见左括号将之前的计算结果与符号入栈
stk.push(nRes);
stk.push(nSigned);
nRes = 0;
nSigned = 1;
}
else if(s[i] == ')')
{
//遇见又括号,则先计算括号内值
nVal = nRes + nSigned*nVal;
//取出()前的符号
nSigned = stk.top();
stk.pop();
//取出进入括号前的运算结果
nRes = stk.top();
stk.pop();
}
}
//遍历结束,计算结果
nRes = nRes + nSigned*nVal;
return nRes;
}
};
THE END
0
二维码
打赏
海报
每日一题:基本计算器(LeetCode 224)
题目
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
示例 1:
- 输入:s = "1 + 1"
- 输出:2
示例 2:
- 输入:s = " 2-1 + 2 "
……
共有 0 条评论