今天和大家聊的问题叫做 基本计算器 II,我们先来看题面:https://leetcode-cn.com/problems/basic-calculator-ii/
Given a string s which represents an expression, evaluate this expression and return its value.
The integer division should truncate toward zero.
给你一个字符串表达式 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) { int result=0,len=s.length(),num=0; char op='+'; //初始上一个运算符为加法 上个数字为0 Stack<Integer> stack=new Stack<Integer>(); for(int i=0;i<len;i++){ char c=s.charAt(i); if(c>='0'){ num=num*10+s.charAt(i)-'0'; } if(c<'0'&&c!=' '||i==len-1){ if(op=='+') stack.push(num); if(op=='-') stack.push(-num); if(op=='*'||op=='/'){ int temp=(op=='*')?stack.pop()*num:stack.pop()/num; stack.push(temp); } op=s.charAt(i); num=0; } } while(!stack.isEmpty()){ result+=stack.pop(); } return result; } }
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。