• 逆波兰表达式求值


    题目信息

    根据逆波兰表示法,求表达式的值。
    有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
    说明:
    整数除法只保留整数部分。    
    给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
    示例 1:
        输入: ["2", "1", "+", "3", "*"]
        输出: 9
        解释: ((2 + 1) * 3) = 9
    示例 2:
        输入: ["4", "13", "5", "/", "+"]
        输出: 6
        解释: (4 + (13 / 5)) = 6
    示例 3:
        输入: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
        输出: 22
        解释: 
         ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
        = ((10 * (6 / (12 * -11))) + 17) + 5
        = ((10 * (6 / -132)) + 17) + 5
        = ((10 * 0) + 17) + 5
        = (0 + 17) + 5
        = 17 + 5
        = 22

    解题思路

    从题目描述可以看出,其实就是表达式的方式,只不过先输入两个数字,再输入操作符
    也是模拟栈的方式,判断如果是数字进栈,如果是操作符,取出栈中的前两个元素,进行该
    操作的的操作即可

    代码

    class StackInt {
        var array = [Int]();
        
        func pop() -> Int {
            if array.isEmpty {
                return 0;
            }
            return array.removeLast();
        }
        
        func push(num: Int) -> Void {
            array.append(num);
        }
        
        func top() -> Int {
            if array.isEmpty {
                return 0;
            }
            return array.last!;
        }
        
    }
    
    /// 逆波兰表达式求值
    func evalRPN(_ tokens: [String]) -> Int {
        let stack = StackInt();
        var sum = 0;
        for string: String in tokens {
            if "+-*/".contains(string) {
                let right = stack.pop();
                let left = stack.pop();
                switch string {
                case "+":
                    sum = left + right;
                    stack.push(num: sum);
                    break;
                case "-":
                    sum = left - right;
                    stack.push(num: sum);
                    break;
                case "*":
                    sum = left * right;
                    stack.push(num: sum);
                    break;
                case "/":
                    sum = left / right;
                    stack.push(num: sum);
                    break;
                default:
                    break
                }
            } else {
                stack.push(num: Int(string)!);
            }
        }
        return stack.pop();
    }

    题目链接

  • 相关阅读:
    控制论学习
    离开
    Python学习
    GHSpro多数据库连接
    django基础 第五章 Django连接数据库
    django基础 第四章 模板标签
    django基础 第三章 模板变量
    django基础 第二章 url配置及文件渲染
    django基础 第一章 环境搭建
    python基础 六、模块和包
  • 原文地址:https://www.cnblogs.com/muzichenyu/p/12809607.html
Copyright © 2020-2023  润新知