给定一个字符串形式的表达式 s ,请你实现一个计算器并返回结果。
数据范围:表达式长度满足 ,字符串中包含 + , - , ( , ) ,保证表达式合法。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ public int calculate (String s) { // write code here Stack<Integer> stack= new Stack(); int res = 0; int num = 0; int sign = 1; for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); if(c >= '0' && c <= '9'){ num = num * 10 + (c - '0'); }else if(c == '+'){ res += sign * num; num = 0; sign = 1; }else if(c == '-'){ res += sign * num; num = 0; sign = -1; }else if(c == '('){ stack.push(res); stack.push(sign); sign = 1; res = 0; }else if(c == ')'){ res += sign * num; num = 0; res *= stack.pop(); res += stack.pop(); } } if(num != 0){ res += sign * num; } return res; } }
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ int calculate(string s) { // write code here stack<int> sign; int res = 0 , tmp = 0 , sig =1; sign.push(sig); for(auto &it : s){ if(it >= '0' and it <='9') tmp = tmp*10+(it-'0'); else{ res += tmp*sig , tmp = 0; switch(it){ case '+': sig = sign.top(); break; case '-': sig = -sign.top(); break; case '(': sign.push(sig); break; default: sign.pop(); break; } } } res += sig *tmp; return res; } };