题目的链接在这里:https://leetcode-cn.com/problems/basic-calculator-ii/
题目大意
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。
一、示意图
二、解题思路
使用栈
栈
代码如下:
class Solution {
public int calculate(String s) {
//一个新的方法就是把栈里所有的数值都算作加法的
char[] chars = s.toCharArray();
Stack<Integer> stack=new Stack<>();
//把字符从 比如 17+6*7 变成 +17+6*7
//所以用来判断 每次如果是数值进入的话 就进行累计 如果是字符或者到最后一个点了的话
//就进行字符运算 为什么-的话 就可以直接负数进去呢7-6*6 也就等于 7-36是吧
//初始化为+
char sign='+';
int num=0;
for(int i=0;i<chars.length;i++){
//开始判读
if(chars[i]>='0'){
//说明是数值
//那就先进行存储
//这里先进行-‘0’再加是为了防止溢出
num=num*10-'0'+chars[i];
}
if((chars[i]<'0'&&chars[i]!=' ')||i==chars.length-1){
//那就通过上一个符号来判断这个符号是干嘛的
//比如 +7/5+6 到/的时候 就需要把前面的+7进行判断了 然后把这个/作为新的更新
switch (sign){
case '+':
//如果是加法就直接进栈
stack.push(num);
break;
case '-':
//如果是减法就变成负数 然后进栈
stack.push(-num);
break;
case '*':
//如果是乘法 那就需要进行判断了 那就是把栈顶元素出栈 然后和这个num进行操作在进栈
stack.push(stack.pop()*num);
break;
case '/':
//也和乘法一样
stack.push(stack.pop()/num);
break;
}
//一次操作之后这个时候 数值也已经精湛了 就新建更新就好了
sign=chars[i];
//num也要更新
num=0;
}
}
//然后就是把所有的值加起来就好了
int result=0;
while (!stack.isEmpty()){
result+=stack.pop();
}
return result;
}
}