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