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

java

java的stack中,s.pop()不仅会弹出栈顶元素,还会返回栈顶元素。

String转int
Integer.parseInt
Integer.valueof()返回的是Integer的对象。
Integer.valueof().intValue();返回的也是一个int的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.Stack;
public class {
public int evalRPN(String[] tokens) {
Stack<Integer> s=new Stack<Integer>();
int len=tokens.length;
if(len==0)
return 0;
for(int i=0;i<len;i++)
{
if(tokens[i].equals("+"))
{
int a=s.pop();
int b=s.pop();
s.push(a+b);
}
else if(tokens[i].equals("-"))
{
int a=s.pop();
int b=s.pop();
s.push(b-a);
}
else if(tokens[i].equals("*"))
{
int a=s.pop();
int b=s.pop();
s.push(a*b);
}
else if(tokens[i].equals("/"))
{
int a=s.pop();
int b=s.pop();
s.push(b/a);
}
else
{
int temp=Integer.parseInt(tokens[i]);
s.push(temp);
}
}
return s.peek();
}
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;
int len=tokens.size();
if(len==0)
return 0;
for(int i=0;i<len;i++)
{
if(tokens[i]=="+")
{
int a=s.top();
s.pop();
int b=s.top();
s.pop();
s.push(a+b);
}
else if(tokens[i]=="-")
{
int a=s.top();
s.pop();
int b=s.top();
s.pop();
s.push(b-a);
}
else if(tokens[i]=="*")
{
int a=s.top();
s.pop();
int b=s.top();
s.pop();
s.push(a*b);
}
else if(tokens[i]=="/")
{
int a=s.top();
s.pop();
int b=s.top();
s.pop();
s.push(b/a);
}
else
{
s.push(stoi(tokens[i]));
}
}
return s.top();
}
};