ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

学习知识点记录(五):逆波兰表达式Java总结

学习知识点记录(五):逆波兰表达式Java总结 逆波兰表达式Java总结介绍优点使用案例题目注意思路代码展示测试结果介绍逆波兰表达式是一种后缀表达式所谓后缀就是指算符写在后面。平常使用的算式则是一种中缀表达式如 ( 1 2 ) * ( 3 4 ) 。该算式的逆波兰表达式写法为 ( ( 1 2 ) ( 3 4 ) * ) 。优点主要有两个优点去掉括号后表达式无歧义上式即便写成 1 2 3 4 * 也可以依据 次序计算出正确结果。适合用栈操作运算遇到数字则入栈遇到算符则取出栈顶两个数字进行计算并将结果压入栈中使用案例题目给你一个字符串数组 tokens 表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。每个操作数运算对象都可以是一个整数或者另一个表达式。两个整数之间的除法总是 向零截断 。表达式中不含除零运算。输入是一个根据逆波兰表示法表示的算术表达式。答案及所有中间计算结果可以用 32 位 整数表示。思路根据题意可知若遇到、-、*、/这四个运算符中任意一个则从stack栈中取出两个值与该运算符进行计算并将结果重新push到栈中遍历完数组最终stack栈中只有一个元素即为结果。注当表示式为/时被除数不能为0,即第一个pop出来的值不能为0若为0该表达式结果直接设为0代码展示publicintevalRPN(String[]tokens){StackStringstacknewStackString();intresult0;inttemp1,temp2,temp3;for(Stringtoken:tokens){if(.equals(token)){temp1Integer.valueOf(stack.pop());temp2Integer.valueOf(stack.pop());temp3temp1temp2;stack.push(String.valueOf(temp3));}elseif(-.equals(token)){temp1Integer.valueOf(stack.pop());temp2Integer.valueOf(stack.pop());temp3temp2-temp1;stack.push(String.valueOf(temp3));}elseif(*.equals(token)){temp1Integer.valueOf(stack.pop());temp2Integer.valueOf(stack.pop());temp3temp1*temp2;stack.push(String.valueOf(temp3));}elseif(/.equals(token)){temp1Integer.valueOf(stack.pop());temp2Integer.valueOf(stack.pop());if(temp10){temp30;}else{temp3temp2/temp1;}stack.push(String.valueOf(temp3));}else{stack.push(token);}}resultInteger.valueOf(stack.pop());returnresult;}测试结果输入s [“10”,“6”,“9”,“3”,“”,“-11”,““,”/“,””,“17”,“”,“5”,“”]输出22
返回列表