每日题目
题目:计算器
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例:
示例 1:
输入: “3+2*2”
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
小坑,字符串里有空格,需要替换掉
代码:
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; } }
以上就是计算器的全部内容