LeetCode 150. 逆波兰表达式求值

题目链接:LeetCode 150. 逆波兰表达式求值

题意:

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

解题思路:

(栈操作) O(n)

  1. 遍历所有元素。如果当前元素是整数,则压入栈;如果是运算符,则将栈顶两个元素弹出做相应运算,再将结果入栈。
  2. 最终表达式扫描完后,栈里的数就是结果。
  3. 时间复杂度分析:每个元素仅被遍历一次,且每次遍历时仅涉及常数次操作,所以时间复杂度是 O(n)

完整代码如下:

func evalRPN(tokens []string) int {
    //对所有的数字入栈,
    n:=len(tokens)
    var res []int
    for i:=0;i<n;i++{
        val, err :=strconv.Atoi(tokens[i])
        if err == nil{
            res = append(res,val)
        }else{
            m:=len(res)
            b := res[m-1]
            a := res[m-2]
            res = res[:m-2]
        if tokens[i] == "+"{
            res = append(res,a+b) 

        }else if tokens[i] == "-"{
            res = append(res,a-b) 
            
        }else if tokens[i] == "*"{
            res = append(res,a*b) 
            
        }else{
            res = append(res,a/b) 
        }
    }
    }
    return res[0]
}
posted @ 2023-05-14 18:38  小星code  阅读(27)  评论(0)    收藏  举报