基本计算器 发表于 2022-08-15 | 分类于 算法 , 栈 , 基本计算器 | 基本计算器 224. 基本计算器123456789101112131415161718192021222324252627282930class Solution {public: int calculate(string s) { //思路:由于只有+、-操作,将括号展开,借助于栈 stack<int> sign; //栈顶记录当前符号 sign.push(1); //默认为 + int res = 0; int num = 0; int op = 1; for(char ch : s){ //遍历 空格自动跳过 if(ch>='0' && ch<='9'){ //遇到数值 num = num*10 + (ch-'0'); continue; } res += op * num; //计算一个运算符 num = 0; //数值清空 if(ch=='+') op = sign.top(); else if(ch=='-') op = -sign.top(); else if(ch=='(') sign.push(op); //进入左括号,把左括号之前的符号置于栈顶 else if(ch==')') sign.pop(); //退出括号,弹出栈顶符号 } res += op*num; //计算最后一个数 return res; }}; 12345678910111213141516171819202122232425262728293031func calculate(s string) int { //思路:由于只有+、-操作,将括号展开,借助于栈 sign := []int{1} //栈顶记录当前符号,默认为 + res := 0 num := 0 op := 1 for _, ch := range s { //遍历 空格自动跳过 if ch >= '0' && ch <= '9' { //遇到数值 num = num*10 + int(ch-'0') continue } res += op * num //计算一个运算符 num = 0 //数值清空 if ch == '+' { op = sign[len(sign)-1] } else if ch == '-' { op = -sign[len(sign)-1] } else if ch == '(' { sign = append(sign, op) //进入左括号,把左括号之前的符号置于栈顶 } else if ch == ')' { sign = sign[:len(sign)-1] //退出括号,弹出栈顶符号 } } res += op * num //计算最后一个数 return res} -------------本文结束 感谢阅读------------- 本文作者: HReina 本文链接: http://hreina.com/2022/08/15/%E5%9F%BA%E6%9C%AC%E8%AE%A1%E7%AE%97%E5%99%A8/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!