leetcode 150. Evaluate Reverse Polish Notation ------ java
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了leetcode 150. Evaluate Reverse Polish Notation ------ java,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2089字,纯文字阅读大概需要3分钟。
内容图文
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
就是求逆波兰表达式(后续遍历)的结果。
1、直接求解,很慢
public class Solution { public int evalRPN(String[] tokens) { int len = tokens.length; if( len == 0) return 0; for( int i = 0 ; i < len ; i ++ ){ if( tokens[i].equals("+") ) helper(tokens,i,1); elseif( tokens[i].equals("-") ) helper(tokens,i,2); elseif( tokens[i].equals("*") ) helper(tokens,i,3); elseif( tokens[i].equals("/") ) helper(tokens,i,4); } return Integer.valueOf(tokens[0]); } publicvoid helper(String[] tokens,int pos,int type){ int pos1 = -1,pos2 = 0 ; tokens[pos] = null; while( pos >= 0 ){ if( tokens[pos] != null){ if( pos1 == -1) pos1 = pos; else{ pos2 = pos; break; } } pos--; } int num1 = Integer.valueOf(tokens[pos1]); int num2 = Integer.valueOf(tokens[pos2]); if( type == 1){ tokens[pos2] = String.valueOf(num1+num2); }elseif( type == 2){ tokens[pos2] = String.valueOf(num2-num1); }elseif( type == 3){ tokens[pos2] = String.valueOf(num2*num1); }elseif( type == 4){ tokens[pos2] = String.valueOf(num2/num1); } tokens[pos1] = null; } }
2、使用栈,很简单。
public class Solution { public int evalRPN(String[] tokens) { int len = tokens.length; if( len == 0) return 0; Stack<Integer> stack = new Stack<Integer>(); for( int i = 0 ; i < len ; i ++ ){ if( tokens[i].equals("+") ){ int num1 = stack.pop(); int num2 = stack.pop(); stack.push(num1+num2); } elseif( tokens[i].equals("-") ){ int num1 = stack.pop(); int num2 = stack.pop(); stack.push(num2-num1); } elseif( tokens[i].equals("*") ){ int num1 = stack.pop(); int num2 = stack.pop(); stack.push(num1*num2); } elseif( tokens[i].equals("/") ){ int num1 = stack.pop(); int num2 = stack.pop(); stack.push(num2/+num1); }else{ stack.push(Integer.valueOf(tokens[i])); } } return stack.pop(); } }
原文:http://www.cnblogs.com/xiaoba1203/p/6078708.html
内容总结
以上是互联网集市为您收集整理的leetcode 150. Evaluate Reverse Polish Notation ------ java全部内容,希望文章能够帮你解决leetcode 150. Evaluate Reverse Polish Notation ------ java所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。