描述

请写一个整数计算器,支持加减乘三种运算和括号。
示例1
输入:
"1+2"
返回值:
3
示例2
输入:
"(2*(3-4))*5"
返回值:
-10
示例3
输入:
"3+2*3*4-1"
返回值:
26
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ int solve(string s) { // write code here int res = 0; //返回字符串计算结果 stack<int> sum;//用于求和 char sign = '+';//初始化为+,记录前一个符号,当前字符串先加0 int num = 0;//将连续字符串转化成数字,记录递归结果 for(int i = 0; i < s.size(); i++) { if(s[i] >= '0' && s[i] <= '9') num = 10 * num + s[i] - '0'; //进位后加个位数 if(s[i] == '(') { int left = i++, count = 1;//left记录左括号的位置,count记录左括号数 //i作为右指针右移一格 while(count > 0 ) {//最终目的是找到与最左括号匹配的右括号,类似于栈操作 if(s[i] == '(')count++; else if(s[i] == ')')count--; i++; } num = solve(s.substr(left + 1, i - left - 2)); //迭代计算括号内的数值,不能保号最左最尤括号,不然会跑死 i--;//此时i是最右括号的下一位,需哟啊左移一位,防止越界 } if(i == s.size() - 1 || s[i] == '+' || s[i] == '-' || s[i] == '*') {//对于字符串尾,或者加减乘,用上一次的符号,结算当前数字 if(sign == '+') sum.push(num); else if(sign == '-') sum.push(-num); else if(sign == '*') sum.top() *= num; sign = s[i];//更新符号,末尾是右括号也无妨,马上就退出循环 num = 0; } } while(!sum.empty()) { res += sum.top(); sum.pop(); } return res; } };


还没有评论,来说两句吧...