Advertisement
Alexxik

Untitled

Sep 14th, 2023
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.51 KB | None | 0 0
  1. // MARK: - 150. Evaluate Reverse Polish Notation
  2.  
  3. struct StackElements {
  4.     var array = [String]()
  5.    
  6.     func getTop() -> String? {
  7.         array.last
  8.     }
  9.    
  10.     mutating func addTop(value: Int) {
  11.         array.append(String(value))
  12.     }
  13.    
  14.     mutating func removeTop() -> Int {
  15.         Int(array.removeLast())!
  16.     }
  17. }
  18.  
  19. func evalRPN(_ tokens: [String]) -> Int {
  20.     let tokens = tokens.map{String($0)}
  21.     var stack = StackElements()
  22.    
  23.     for token in tokens {
  24.        
  25.         // При операциях +, * мы не учитываем порядок как берем элемент из стека. Для -, / это важно
  26.         if token == "+" {
  27.             stack.addTop(value: stack.removeTop() + stack.removeTop())
  28.         } else if token == "-" {
  29.             // firstValue - вычитаемое
  30.             let firstValue = stack.removeTop()
  31.             let secondValue = stack.removeTop()
  32.             stack.addTop(value: secondValue - firstValue)
  33.         } else if token == "*" {
  34.             stack.addTop(value: stack.removeTop() * stack.removeTop())
  35.         } else if token == "/" {
  36.             // firstValue - второе делимое
  37.             let firstValue = stack.removeTop()
  38.             let secondValue = stack.removeTop()
  39.             stack.addTop(value: secondValue / firstValue)
  40.         } else {
  41.             stack.addTop(value: Int(token)!)
  42.         }
  43.     }
  44.     return Int(stack.getTop()!)!
  45. }
  46.  
  47. let tokens = ["4","13","5","/","+"]
  48. evalRPN(tokens)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement