golang中怎么利用leetcode实现逆波兰式

发布时间:2021-08-02 16:31:38 作者:Leah
来源:亿速云 阅读:158

今天就跟大家聊聊有关golang中怎么利用leetcode实现逆波兰式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

根据逆波兰表示法,求表达式的值。

有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

整数除法只保留整数部分。

给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 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

解题思路:

本题很简单,理解逆波兰式就ok

 逆波兰式求解原理:

1,从左往右扫描token

2,如果式操作数,入栈

3,如果是操作符,弹出两个操作数

4,计算结果,将结果入栈

5,扫描完token,栈中,剩下结果,结果出栈

import "strconv"
func evalRPN(tokens []string) int {  var s stack  for i := 0; i < len(tokens); i++ {    if !isOperator(tokens[i]) {      s.Push(tokens[i])    } else {      op2 := s.Pop()      op1 := s.Pop()      res := eval(op1, op2, tokens[i])      s.Push(fmt.Sprint(res))    }  }  r := s.Pop()  rv, _ := strconv.ParseInt(r, 10, 64)  return int(rv)
}
func eval(op1 string, op2 string, token string) int64 {  o1, _ := strconv.ParseInt(op1, 10, 64)  o2, _ := strconv.ParseInt(op2, 10, 64)  switch token {  case "+":    return o1 + o2  case "-":    return o1 - o2  case "*":    return o1 * o2  case "/":    return o1 / o2  }  return 0}
func isOperator(token string) bool {  return token == "+" || token == "-" || token == "*" || token == "/"}
type stack struct {  data []string}
func (s *stack) Push(str string) {  s.data = append(s.data, str)}
func (s *stack) Pop() string {  if len(s.data) < 1 {    return ""  }  str := s.data[len(s.data)-1]  s.data = s.data[:len(s.data)-1]  return str}

看完上述内容,你们对golang中怎么利用leetcode实现逆波兰式有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

推荐阅读:
  1. golang中怎么利用leetcode 实现一个任务调度器
  2. golang中怎么利用leetcode 删除链表重复元素

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

golang leetcode

上一篇:golang中怎么利用leetcode实现有重复字符串的排列组合

下一篇:JavaScript中数组常见的操作技巧分享

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》