芜湖市建设工程质监站网站,有没有网站找人帮忙做图,宿迁房产网官网房价,项目建设的背景怎么写给你一个字符串表达式 s #xff0c;请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数#xff0c;比如 eval() 。 1 s.length 3 * 105 s 由数字、‘’、‘-’、‘(’、‘)’、和 ’ ’ 组成 s 表示一个有效的… 给你一个字符串表达式 s 请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数比如 eval() 。 1 s.length 3 * 105 s 由数字、‘’、‘-’、‘(’、‘)’、和 ’ ’ 组成 s 表示一个有效的表达式 ‘’ 不能用作一元运算(例如 “1” 和 “(2 3)” 无效) ‘-’ 可以用作一元运算(即 “-1” 和 “-(2 3)” 是有效的) 输入中不存在两个连续的操作符 每个数字和运行的计算将适合于一个有符号的 32位 整数 class Solution {public int calculate(String s) {StackInteger stack_num new Stack();StackCharacter stack_sign new Stack();int num 0, out 0;//消除所有空格s s.replaceAll( ,);//反正第一个是负数stack_num.push(0);for(int i 0; i s.length(); i){//先考虑整数if(s.charAt(i) 0 s.charAt(i) 9) {num 0;while(i s.length() s.charAt(i) 0 s.charAt(i) 9){num num * 10 s.charAt(i) - 0;i;}i--;stack_num.push(num);//再考虑符号}else{//如果是右括号则一直运算到左括号if(s.charAt(i) )){while(stack_sign.peek() ! (){int y stack_num.pop();int x stack_num.pop();if(stack_sign.pop() -){stack_num.push(x-y);}else{stack_num.push(xy);}}stack_sign.pop();}//如果是左括号则直接进符号栈else if(s.charAt(i) ()stack_sign.push(();else{//特殊情况就是左括号后第一个字符是正负号if(i 0 s.charAt(i-1) ()stack_num.push(0);//剩下的就是加减法符号再进栈之前要先把之前可以进行加减运算的进行计算while(!stack_sign.isEmpty() stack_sign.peek() ! ( stack_num.size() 2){int y stack_num.pop();int x stack_num.pop();if(stack_sign.pop() -){stack_num.push(x-y);}else{stack_num.push(xy);}}stack_sign.push(s.charAt(i));}}}while(!stack_sign.isEmpty()){int y stack_num.pop();int x stack_num.pop();if(stack_sign.pop() -){stack_num.push(x-y);}else{stack_num.push(xy);}}return stack_num.pop();}
}