题目:
给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 '+'、'-'、'*' 和 '/' 。 每个操作数(运算对象)都可以是一个整数或者另一个表达式。 两个整数之间的乘法总是 向零截断 。 表达式中不含除零运算。 输入是一个根据逆波兰表示法表示的算术表达式。 答案及所有中间计算结果可以用 32 位 整数表示。
示例:
输入:tokens = ["2","1","+","3","*"] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
思路:
和《删除字符串中的所有相邻重复项》一题相似
遍历string数组,遇到数字压入栈中,遇到符号,则弹出两个元素进行运算。
需要注意的是,减法和除法要确认数字的位置顺序。
class Solution { public int evalRPN(String[] tokens) { Stack<Integer> st=new Stack<>(); for(int i=0;i<tokens.length;i++){ if(tokens[i].equals("+")){// leetcode 内置jdk的问题,不能使用==判断字符串是否相等 int a=st.pop(); int b=st.pop(); st.push(a+b);//将一个计算结果压入栈 }else if(tokens[i].equals("-")){//-和/要注意计算顺序 int a=st.pop(); int b=st.pop(); st.push(b-a); }else if(tokens[i].equals("*")){ int a=st.pop(); int b=st.pop(); st.push(a*b); }else if(tokens[i].equals("/")){ int a=st.pop(); int b=st.pop(); st.push(b/a); }else{ st.push(Integer.valueOf(tokens[i])); } } return st.pop(); //弹出最终计算结果 } }
标签:tokens,150,算术,整数,力扣,波兰,求值,表达式 From: https://www.cnblogs.com/cjhtxdy/p/17019209.html