计算器

每日题目

题目:计算器

给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例:

示例 1:

输入: “3+2*2”
输出: 7

示例 2:

输入: “ 3/2 “
输出: 1

示例 3:

输入: “ 3+5 / 2 “
输出: 5

说明:

你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。

小坑,字符串里有空格,需要替换掉

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Solution {
public int calculate(String s) {
s =s.replaceAll(" ","");
Deque<Integer> stack = new ArrayDeque<>();
//先把第一个加进去
char flag = '+';
//数字的初始值
int num = 0;
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){
if(flag=='+'){
stack.push(num);
}else if(flag=='-'){
stack.push(-num);
}else if(flag=='*'){
stack.push(stack.pop()*num);
}else if(flag=='/'){
stack.push(stack.pop()/num);
}
flag = s.charAt(i);
num =0;
}

}
//遍历栈,累加结果
int res =0;
while(!stack.isEmpty()){
res += stack.pop();
}

return res;


}
}