题目1:用栈实现 数字的各种可能计算 (根据顺序)
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are+,-,*,/. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
以异常方式:
import java.util.Stack; public class Solution { public int evalRPN(String[] tokens) { //逆波兰数 //考察知识点 应该是 使用栈来实现 数字运算 Stack<Integer> stack=new Stack<Integer> (); for(int i=0;i<tokens.length;i++){ try{ int num=Integer.parseInt(tokens[i]); //将数字字符串转化为整型数字 stack.push(num); //若是数字则压栈 为计算符号则抛异常 }catch(Exception e){ int b=stack.pop(); //两个运算符前即将要计算的数字 int a=stack.pop(); stack.push(getCal(a,b,tokens[i])); } } return stack.pop(); //返回最终的结果 } public int getCal(int a,int b, String operator){ switch(operator){ case "+": return a+b; case "-": return a-b; case "*": return a*b; case "/": return a/b; default: return 0; } } }
以正常循环方式:
import java.util.Stack; public class Solution{ public int evalRPN(String [] tokens){ if(tokens==null){ return Integer.MAX_VALUE; } Stack<Integer> stack=new Stack<Integer> (); for(int i=0;i<tokens.length;i++){ String s=tokens[i]; if(s.equals("+") || s.equals("-") || s.equals("*")|| s.equals("/")){ //比较内容相等 必须用equals int num2=stack.pop(); int num1=stack.pop(); int result=0; switch(s){ case "+": result=num1+num2; //必须在case分语句中设置break 或者直接return 数据 break; case "-": result=num1-num2; break; case "*": result=num1*num2; break; case "/": result=num1/num2; break; default: result=0; } stack.push(result); }else{ stack.push(Integer.parseInt(tokens[i])); } } return stack.pop(); } }