给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
示例 1:
输入:s = "3+2*2"
输出:7
示例 2:
输入:s = " 3/2 "
输出:1
示例 3:
输入:s = " 3+5 / 2 "
输出:5
提示:
1 <= s.length <= 3 * 105
s 由整数和算符 ('+', '-', '*', '/') 组成,中间由一些空格隔开
s 表示一个 有效表达式
表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
题目数据保证答案是一个 32-bit 整数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/basic-calculator-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int calculate(String s) {
s=s.replaceAll(" ", "");
int res=0;
Stack<Integer> numStack=new Stack<Integer>();
int num=0;
char presign='+';
for(int i=0;i<s.length();i++){
if(Character.isDigit(s.charAt(i))) {
num=num*10+s.charAt(i)-'0';
}
if(!Character.isDigit(s.charAt(i))||i==s.length()-1) {
char c=s.charAt(i);
if(presign=='+') numStack.push(num);
else if(presign=='-') numStack.push(-num);
else if(presign=='*') numStack.push(numStack.pop()*num);
else numStack.push(numStack.pop()/num);
presign=c;
num=0;
}
}
while(!numStack.isEmpty()) {
res+=numStack.pop();
}
return res;
}
}