Leetcode150. Evalution Reverse Polish Notation

逆波兰表达式就是把操作数放前面, 把操作符后置的一种写法, 第一个出现的运算符, 前面必定会由数字, 然后将这两个数字进行运算后, 将新的数字插到原位置, 继续操作, 最后可以得到答案. 

用栈的思路比较简单 :

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        int res = 0;
        for (String c : tokens) {
            if (c.equals("+")) {
                int n1 = stack.pop();
                int n2 = stack.pop();
                res = n1 + n2;
                stack.push(res);
            } else if (c.equals("-")) {
                int n1 = stack.pop();
                int n2 = stack.pop();
                res = n2 - n1;
                stack.push(res);
            } else if (c.equals("*")) {
                int n1 = stack.pop();
                int n2 = stack.pop();
                res = n1 * n2;
                stack.push(res);
            } else if (c.equals("/")) {
                int n1 = stack.pop();
                int n2 = stack.pop();
                res = (int) (n2 / n1);
                stack.push(res);
            } else {
                stack.push(Integer.parseInt(c));
            }
        }
        return stack.pop();
    }
}

在写这段代码中遇到的几个问题 :

  1. 开始的时候, 将 tokens 作为了一个字符串, 而不是字符串数组, 所以就需要考虑将 char 转换为 int 的方法 : 
    一种是先将单个的 char 转换为 string, 利用 string 转为 int : Integer.parseInt(new String(charArray));
    另一种是利用 char 的包装类 character : Character.getNumbericValue(numChar)
  2. 但是实际上 tokens 是一个 字符串数组, 这里考虑 int 转 String 和 String 转 int 的各种方法 
  3. int 转 String 
    - num + ""
    - String.valueOf(num)
    - Integer.toString(num)
  4. String 转 int
    - Integer.parseInt(str)
    - Integer.valueOf(str).intValue()
  5. 从栈顶取出两个数字后, 进行运算, 这里, "-" 和 "/" 的两个运算数的位置是有区别的, 所以这里开始弄错了, 遇到这样先后有区别不满足交换律的数字应该注意.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值