剑指offer 专项突破版 36、后缀表达式

题目链接

思路:栈

非常基础的题目,唯一需要注意的就是操作数的顺序以及switch中可以放String类型(jdk7开始)

class Solution {

    boolean isOperator(String s) {
        return s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/");
    }

    public int evalRPN(String[] tokens) {
        Stack<Integer> nums = new Stack<>();

        for (String str : tokens) {
            
            if (!isOperator(str)) {
                nums.push(Integer.parseInt(str));
            } else {
                int result = 0, num1 = nums.pop(), num2 = nums.pop();
                
                switch (str) {
                    case "+":
                        result = num2 + num1;
                        break;
                    case "-":
                        result = num2 - num1;
                        break;
                    case "*":
                        result = num2 * num1;
                        break;
                    case "/":
                        result = num2 / num1;
                        break;
                }
                nums.push(result);
            }
        }
        return nums.pop();
    }
}
Go代码
func evalRPN(tokens []string) int {
	var stack []int

	for _, token := range tokens {
		if num, err := strconv.Atoi(token); err == nil {
			stack = append(stack,num)
		} else {
			length := len(stack)
			num1, num2 := stack[length-2], stack[length-1]
			stack = stack[0 : length-2]
			switch token {
			case "+":
				stack = append(stack, num1+num2)
			case "-":
				stack = append(stack, num1-num2)
			case "*":
				stack = append(stack, num1*num2)
			case "/":
				stack = append(stack, num1/num2)
			}
		}
	}
	return stack[0]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值