public class Solution { public int EvalRPN(string[] tokens) { Stack<int> ST_NUM = new Stack<int>(); foreach (var to in tokens) { if (to == "+" || to == "-" || to == "*" || to == "/") { var num1 = ST_NUM.Pop(); var num2 = ST_NUM.Pop(); if (to == "+") { var num = num2 + num1; ST_NUM.Push(num); } else if (to == "-") { var num = num2 - num1; ST_NUM.Push(num); } else if (to == "*") { var num = num2 * num1; ST_NUM.Push(num); } else if (to == "/") { var num = num2 / num1; ST_NUM.Push(num); } } else { var num = Convert.ToInt32(to); ST_NUM.Push(num); } } var result = ST_NUM.Pop(); return result; } }
补充一个python的实现:
1 import math 2 class Solution: 3 def __init__(self): 4 self.symbollist = set() 5 self.symbollist.add('+') 6 self.symbollist.add('-') 7 self.symbollist.add('*') 8 self.symbollist.add('/') 9 10 def isSymbol(self,string): 11 if string in self.symbollist: 12 return True 13 else: 14 return False 15 def cal(self,num1,num2,sym): 16 if sym == '+': 17 return num1 + num2 18 elif sym == '-': 19 return num2 - num1 20 elif sym == '*': 21 return num1 * num2 22 else: 23 dd = num2 / num1 24 if dd < 0: 25 dd = math.ceil(dd) 26 else: 27 dd = math.floor(dd) 28 return dd 29 30 def evalRPN(self, tokens: 'List[str]') -> int: 31 numstack = [] 32 r = 0 33 for s in tokens: 34 if self.isSymbol(s): 35 num1 = numstack.pop(-1) 36 num2 = numstack.pop(-1) 37 r = self.cal(num1,num2,s) 38 numstack.append(r) 39 else: 40 numstack.append(int(s)) 41 return numstack[0]