public class Solution {
public int EvalRPN(string[] tokens)
{
var stNo = new Stack<int>();
var stOp = new Stack<char>();
for(var i = 0;i < tokens.Length; i++){
if(IsOp(tokens[i])){
if(stNo.Count == 0){
stOp.Push(tokens[i][0]);
}
else{
var n1 = stNo.Pop();
var n2 = stNo.Pop();
stNo.Push(Calc(n1, n2, tokens[i][0]));
}
}
else{
stNo.Push(int.Parse(tokens[i]));
}
}
while(stOp.Count > 0){
var op = stOp.Pop();
var n1 = stNo.Pop();
var n2 = stNo.Pop();
stNo.Push(Calc(n1, n2, op));
}
return stNo.Pop();
}
private int Calc(int n1 , int n2, char op)
{
switch(op)
{
case ‘+‘:
return n2 + n1;
case ‘-‘:
return n2 - n1;
case ‘*‘:
return n2 * n1;
case ‘/‘:
return n2 / n1;
default:
throw new NotSupportedException();
}
}
private bool IsOp(string str)
{
if(str == "+" || str == "-" || str == "*" || str == "/")
{
return true;
}
return false;
}
}版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode -- Evaluate Reverse Polish Notation
原文:http://blog.csdn.net/lan_liang/article/details/49188215