• leetcode刷题笔记 241题 为运算表达式设计优先级


    leetcode刷题笔记 241题 为运算表达式设计优先级

    源地址:241. 为运算表达式设计优先级

    问题描述:

    给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。

    示例 1:

    输入: "2-1-1"
    输出: [0, 2]
    解释:
    ((2-1)-1) = 0
    (2-(1-1)) = 2
    示例 2:

    输入: "23-45"
    输出: [-34, -14, -10, -10, 10]
    解释:
    (2(3-(45))) = -34
    ((23)-(45)) = -14
    ((2(3-4))5) = -10
    (2((3-4)5)) = -10
    (((23)-4)5) = 10

    /*
    从理解上看 可以参考95题 以表达式树的构建理解 保证中序遍历不变的情况下 确认树的形状
    
    代码总共分为两部分 前一部分完成字符串转列表 后一部分使用递归思路 对列表内左右内的符号分割,对左右两侧结果进行计算 
    */
    import scala.collection.mutable
    object Solution {
        def diffWaysToCompute(input: String): List[Int] = {
            var i = 0
            var inputRes = List[String]()
            //val res = mutable.ListBuffer[Int]()
    
            //分解字符串
            while (i < input.length) {
                if (input(i).isDigit == true) {
                    var j = i
                    var temp = 0
                    while (j < input.length && input(j).isDigit == true) {
                        temp = temp * 10 + input(j) - '0'
                        j += 1
                    }
                    i = j - 1
                    inputRes = inputRes.appended(temp.toString)
                }
                else {
                    inputRes = inputRes.appended(input(i).toString)
                }
                i += 1
            }
    
            def dfs(left: Int, right: Int): List[Int] = {
                val res = mutable.ListBuffer[Int]()
                if (left == right) return List(inputRes(left).toInt)
                for (i <- Range(left+1, right, 2)) {
                    val leftRes = dfs(left, i-1)
                    val rightRes = dfs(i+1, right)
                    for (x <- leftRes) {
                        for (y <- rightRes) {
                            var z = 0
                            if (inputRes(i) == "+") z = x + y
                            else if (inputRes(i) == "-") z = x - y
                            else z = x * y
                            res.append(z)
                        }
                    }
                }
                return res.toList
            }
    
            return dfs(0, inputRes.length-1)
        }
    }
    
  • 相关阅读:
    占位
    提高班整风带给我的思考
    Servlet笔记
    CommandArgument传多个值
    asp.net中怎么判断request的一个值是否为空
    asp.net中cookie中文乱码的解决
    datatable的手工构造过程
    .net c#日期时间函数大全
    【转载】[.net程序员面试题]
    javascript自动生成表格行
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13923443.html
Copyright © 2020-2023  润新知