思路 题目符号只有+和-,每个数字的符号取决于其前面若干符号的作用维护一个符号栈,当前的真正符号为数字前面的符号和前面若干符号的作用遇到 “(” 进行符号的压入,遇到 “)” 进行符号的弹出例如 1+5-(9+(8-1)) 那么8的真正符号为 + - + 最终为 -最后只需要对字符串进行若干次加法即可(加正数或负数) 代码 class Solution { public: int calculate(string s) { stack<int> ops;ops.push(1);//符号栈 int sign = 1;//当前符号 int ans = 0; int i = 0; //字符串开始扫描 while (i < s.length()) { if (s[i] == ' ') {//空格跳过 i++; } else if (s[i] == '+') {//符号融合 sign = ops.top(); i++; } else if (s[i] == '-') {//符号融合 sign = -ops.top(); i++; } else if (s[i] == '(') {//符号压入 ops.push(sign); i++; } else if (s[i] == ')') {//符号弹出 ops.pop(); i++; } else {//数字整合 long num = 0; while (i < n && s[i] >= '0' && s[i] <= '9') { num = num * 10 + s[i] - '0'; i++; } ans += sign * num; } } return ans; } };