227. 基本计算器 II(不考虑括号)
难度中等
给你一个字符串表达式 s
,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
示例 1:
输入:s = "3+2*2" 输出:7
示例 2:
输入:s = " 3/2 " 输出:1
示例 3:
输入:s = " 3+5 / 2 " 输出:5
class Solution: def calculate(self, s: str) -> int: s = list(s.replace(" ",""))[::-1] stack_num = [] cur = 0 sign='+' while len(s) > 0: ch = s.pop() if ch.isdigit(): cur = 10*cur + int(ch) if (not ch.isdigit()) or len(s) == 0: if sign == '+': stack_num.append(cur) elif sign == '-': stack_num.append(-cur) elif sign == '*': stack_num[-1] *= cur elif sign == "/": stack_num[-1] = int(stack_num[-1]/cur) cur = 0 sign = ch return sum(stack_num)
1 class Solution { 2 public: 3 int calculate(string s) { 4 string fs = "+" + s +"+" ; 5 int num = 0; 6 char sign = '+'; 7 stack<int> stk; 8 for(int i =0;i < fs.size();i++) { 9 char ch = fs[i]; 10 if (ch==' ') continue; 11 12 if (isdigit(ch)) { 13 num = num*10 + (ch-'0'); 14 } 15 if (!isdigit(ch)){ 16 if (sign=='+') { 17 stk.push(num); 18 } else if (sign == '-') { 19 stk.push(-num); 20 } else if (sign == '*') { 21 int top = stk.top();stk.pop(); 22 stk.push(num*top); 23 } else if (sign == '/') { 24 int top = stk.top();stk.pop(); 25 stk.push(top/num); 26 } 27 sign = ch; 28 num = 0; 29 } 30 } 31 int res = 0; 32 while(!stk.empty()) { 33 res +=stk.top(); 34 stk.pop(); 35 } 36 return res; 37 } 38 };
提示:
1 <= s.length <= 3 * 105
s
由整数和算符('+', '-', '*', '/')
组成,中间由一些空格隔开s
表示一个 有效表达式- 表达式中的所有整数都是非负整数,且在范围
[0, 231 - 1]
内 - 题目数据保证答案是一个 32-bit 整数