当前位置: 首页 > 网络应用技术

GO&Java算法是操作表达式设计的优先设计

时间:2023-03-07 19:54:23 网络应用技术

  根据不同的优先级组合数和操作员,给您数字和操作员的字符串,计算并返回所有可能的组合结果。您可以按任何顺序返回答案。

  生成的测试案例满足其相应的输出值,满足32位整数的范围,并且不同结果的数量不超过104。

  输入:表达式=“ 2-1-1”

  输出:[0,2]

  输入:表达式=“ 23-45”

  输出:[-34,-14,-10,-10,10]

  暗示:

  1 <= expression.length <= 20

  表达包括数字和算盘'+',' - '和'*'。

  在[0,99]中输入表达式中的所有整数值

  由于最终答案是由问题的答案(子表达)组成的,因此我们可以使用动态计划将问题分为解决问题。

  提出这个问题的最关键步骤是编写合理的动态计划递归。第一个想法是定义DP [i]的结果以表示上一个i数的计算。这定义了我们很快会发现我们无法编写DP [i+1],因为它们彼此包括并且没有明确的限制。更好的递归类型是定义DP [i] [J]代表表达式计算的结果数字i到j的表达式。最终结果是DP [0] [n-1]。

  首先,我们将字符串分为数字,OP,Digit,op,Digit,op,Digit .....此序列和序列的长度很奇怪,因此子问题的最小长度为3(长度为1,长度为1(长度为1的长度1二元),即计算),也就是说,一个OP操作需要至少三个元素(两个数字和一个OP),以及下一个子女问题的长度是当前的子问题+2(加上OP和一个数字),因此我们可以从儿童问题的最小长度来逐步求解解决方案的最大长度。

  时间复杂性:O(2^n)

  空间复杂性:O(2^n)

  部门:定义最后一个有效的符号位置。例如,A+B+C+D,我们定义第二加数字,对于最终计算位置,您可以获得[A+B]+[C+D],它可以与这种格式相似。然后,您可以发现a = a+b是一种表达式,而b = c+d也是一种表达式。他们可以计算各自的结果,然后通过此加上数字计算A+B。每组的每组两部分,只与所有可能的结果相对应

  对于X op y的格式(OP是操作员,X和Y),其结果组合取决于X和Y的结果组合的数量,并且X和Y可以编写用于塑形的编写,例如X op y.abacus。

  因此,问题的问题是x op y中的x和y:计算符号的左侧和右侧是由计算符号的左侧和右侧分开的。

  func diffwaystocompute(input string)[] int {//如果是一个数字,请返回iSdigit(input){tmp,_:= strconv.atoi(input)

  }

  //确定它是否是整数func isDigit(input String)bool {_,err:= strconv.atoi(输入)如果er!= nil {return false}返回true}