给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 输入:s = "3+2*2" 输出:7 示例 2: 输入:s = " 3/2 " 输出:1 示例 3: 输入:s = " 3+5 / 2 " 输出:5
class Solution {
public int calculate(String s) {
/**
有一个记录上一次出现的符号变量的 pre
加法直接入栈
减法入栈他的相反数
乘除 直接跟栈顶元素运算 在push
有一点注意的是 这个数可以是多位的比如 32
所以应该判断当前字符是不是数字 是就 num=num*10+cur 知道遇到符号,在num 清零
*/
Stack<Integer> stack=new Stack();
char pre='+';
char [] chars=s.toCharArray();
int num=0;//记录当前数字
for(int i=0;i<s.length();i++){
if(Character.isDigit(chars[i])){
//如果是数字就*10+1
num=num*10+chars[i]-'0';
}
//不是数字而且不是空 或者是最后一位
if(i==s.length()-1||!Character.isDigit(chars[i])&&chars[i]!=' '){
if(pre=='+'){
stack.push(num);
}else if(pre=='-'){
stack.push(-num);
}else if(pre=='*'){
stack.push(stack.pop()*num);
}else if(pre=='/'){
stack.push(stack.pop()/num);
}
//num清0
num=0;
//更新前一个符号
pre=chars[i];
}
}
int res=0;
while(!stack.isEmpty()){
//如果不是空就相加
res+=stack.pop();
}
return res;
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有