当前位置:   article > 正文

Golang | Leetcode Golang题解之第241题为运算表达式设计优先级

Golang | Leetcode Golang题解之第241题为运算表达式设计优先级

题目:

题解:

  1. const addition, subtraction, multiplication = -1, -2, -3
  2. func diffWaysToCompute(expression string) []int {
  3. ops := []int{}
  4. for i, n := 0, len(expression); i < n; {
  5. if unicode.IsDigit(rune(expression[i])) {
  6. x := 0
  7. for ; i < n && unicode.IsDigit(rune(expression[i])); i++ {
  8. x = x*10 + int(expression[i]-'0')
  9. }
  10. ops = append(ops, x)
  11. } else {
  12. if expression[i] == '+' {
  13. ops = append(ops, addition)
  14. } else if expression[i] == '-' {
  15. ops = append(ops, subtraction)
  16. } else {
  17. ops = append(ops, multiplication)
  18. }
  19. i++
  20. }
  21. }
  22. n := len(ops)
  23. dp := make([][][]int, n)
  24. for i, x := range ops {
  25. dp[i] = make([][]int, n)
  26. dp[i][i] = []int{x}
  27. }
  28. for sz := 3; sz <= n; sz++ {
  29. for l, r := 0, sz-1; r < n; l += 2 {
  30. for k := l + 1; k < r; k += 2 {
  31. for _, x := range dp[l][k-1] {
  32. for _, y := range dp[k+1][r] {
  33. if ops[k] == addition {
  34. dp[l][r] = append(dp[l][r], x+y)
  35. } else if ops[k] == subtraction {
  36. dp[l][r] = append(dp[l][r], x-y)
  37. } else {
  38. dp[l][r] = append(dp[l][r], x*y)
  39. }
  40. }
  41. }
  42. }
  43. r += 2
  44. }
  45. }
  46. return dp[0][n-1]
  47. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/850339
推荐阅读
相关标签
  

闽ICP备14008679号