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);
else if( tokens[i].equals("-") )
helper(tokens,i,2);
else if( tokens[i].equals("*") )
helper(tokens,i,3);
else if( tokens[i].equals("/") )
helper(tokens,i,4);
}
return Integer.valueOf(tokens[0]);
}
public void 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);
}else if( type == 2){
tokens[pos2] = String.valueOf(num2-num1);
}else if( type == 3){
tokens[pos2] = String.valueOf(num2*num1);
}else if( 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);
}
else if( tokens[i].equals("-") ){
int num1 = stack.pop();
int num2 = stack.pop();
stack.push(num2-num1);
}
else if( tokens[i].equals("*") ){
int num1 = stack.pop();
int num2 = stack.pop();
stack.push(num1*num2);
}
else if( 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();
} }

leetcode 150. Evaluate Reverse Polish Notation ------ java的更多相关文章

  1. Java for LeetCode 150 Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  2. 【Leetcode】Evaluate Reverse Polish Notation JAVA

       一.问题描述 Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators ...

  3. [LeetCode] 150. Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  4. [leetcode]150. Evaluate Reverse Polish Notation逆波兰表示法

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  5. LeetCode——150. Evaluate Reverse Polish Notation

    一.题目链接:https://leetcode.com/problems/evaluate-reverse-polish-notation/ 二.题目大意: 给定后缀表达式,求出该表达式的计算结果. ...

  6. Leetcode#150 Evaluate Reverse Polish Notation

    原题地址 基本栈操作. 注意数字有可能是负的. 代码: int toInteger(string &s) { ; ] == '-' ? true : false; : ; i < s.l ...

  7. 【LeetCode】150. Evaluate Reverse Polish Notation 解题报告(Python)

    [LeetCode]150. Evaluate Reverse Polish Notation 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/ ...

  8. 150. Evaluate Reverse Polish Notation - LeetCode

    Question 150. Evaluate Reverse Polish Notation Solution 2 1 + 3 * 是((2+1)*3)的后缀(postfix)或逆波兰(reverse ...

  9. 【LeetCode】150. Evaluate Reverse Polish Notation

    Evaluate Reverse Polish Notation Evaluate the value of an arithmetic expression in Reverse Polish No ...

随机推荐

  1. Codeforces Round #326 (Div. 2)-Duff and Meat

    题意: Duff每天要吃ai千克肉,这天肉的价格为pi(这天可以买好多好多肉),现在给你一个数值n为Duff吃肉的天数,求出用最少的钱满足Duff的条件. 思路: 只要判断相邻两天中,今天的总花费 = ...

  2. FB分别编译各个项目

    FB里面有个 ActionScript模块 功能, 可以将 不同模块分别编译成一个个swf,这样会将各个独立的模块从主swf中分离出来.如果玩家没使用过这个模块,就不会加到内存中去,这样可以减少不必要 ...

  3. Java 多线程间的通讯

    在前一小节,介绍了在多线程编程中使用同步机制的重要性,并学会了如何实现同步的方法来正确地访问共享资源.这些线程之间的关系是平等的,彼此之间并不存在任何依赖,它们各自竞争CPU资源,互不相让,并且还无条 ...

  4. 自然数n的分解

    输入自然数n(n<100),输出所有和的形式.不能重复. 如:4=1+1+2:4=1+2+1;4=2+1+1 属于一种分解形式. 样例: 输入: 7 输出: 7=1+6 7=1+1+5 7=1+ ...

  5. 《Java7中 下划线的新特性》

    //Java7引入了一个新功能:程序员可以在数值中使用下画线,不管是 //整形数值,还是浮点型数值,都可以自由地使用下划线.通过下划线 //分隔,可以更直观的分辨数值中到底有多少位. public c ...

  6. NSString的几种常用方法

    NSString的几种常用方法   要把 “2011-11-29” 改写成 “2011/11/29”一开始想用ios的时间格式,后来用NSString的方法搞定. [string stringByRe ...

  7. JSON.parse()和JSON.stringify() 的用法区别

    parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":&qu ...

  8. C++11 实现 argsort

    看python发现有这么个api,感觉很实用,想着stl里会不会有这个呢?查了半天毫无结果.于是用lambda自己实现了下. 以vector为例 template<typename T> ...

  9. Linux----快速注释包含特定字符串的行

    常常会需要将程序中的输出语句注释,往往手工非常慢,而且容易漏. 今天研究了 linux  的 sed, 真心好用.. 例子: 将 包含 cout 的语句注释,也就是说包含cout 语句前加入字符串 / ...

  10. STL 源码分析《2》----nth_element() 使用与源码分析

    Select 问题: 在一个无序的数组中 找到第 n 大的元素. 思路 1: 排序,O(NlgN) 思路 2: 利用快排的 RandomizedPartition(), 平均复杂度是 O(N) 思路 ...