一、逆波兰表达式
1.1概念
逆波兰式(Reverse Polish Notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)。
1.2算法:根据中缀表达式求后缀表达式
1.2.1思路分析
中缀表达式 a + b * c + ( d * e + f ) * g ,转换为后缀表达式为:a b c * + d e * f + g * +
举例:1+(2*3)+(4*5+6)*7==179,计算机无法识别 () 通过栈式算法如下:
编辑
1.2.2算法作用
由于计算机(计算器)无法识别我们通过 () 来限定的优先级,而计算机内部是栈式结构,相对计算机而言就需要逆波兰表达式算法。
1.2.3力扣
链接:逆波兰表达式
class Solution { public int evalRPN(String[] tokens) { Stack<Integer> stack=new Stack<>(); for(String s:tokens){ if(isOperate(s)){ int num2=stack.pop(); int num1=stack.pop(); switch(s){ case "+": stack.push(num1+num2); break; case "-": stack.push(num1-num2); break; case "*": stack.push(num1*num2); break; case "/": stack.push(num1/num2); break; } } else{ stack.push(Integer.parseInt(s)); } } return stack.pop(); } public boolean isOperate(String s){ if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){ return true; } return false; } }