0
点赞
收藏
分享

微信扫一扫

553. 最优除法 / 150. 逆波兰表达式求值

往复随安_5bb5 2022-02-27 阅读 55

553. 最优除法【中等题】【每日一题】

思路:【数学法】

代码:

class Solution {
    public String optimalDivision(int[] nums) {
        int len = nums.length;
        if (len == 1){
            return nums[0]+"";
        }
        if (len == 2){
            return nums[0]+"/"+nums[1];
        }
        StringBuilder ans = new StringBuilder(nums[0] + "/(");
        for (int i = 1; i < len; i++) {
            ans.append(nums[i]).append("/");
        }
        ans.deleteCharAt(ans.length()-1);
        return ans+")";
    }
}

150. 逆波兰表达式求值【中等题】

思路:

代码:

class Solution {
    public int evalRPN(String[] tokens) {
        int len = tokens.length;
        if (len == 1){
            return Integer.parseInt(tokens[0]);
        }
        if (len == 2){
            return -1;
        }
        LinkedList<Integer> list = new LinkedList<>();
        list.addFirst(Integer.parseInt(tokens[0]));
        list.addLast(Integer.parseInt(tokens[1]));
        for (int i = 2; i < len; i++) {
            String cur = tokens[i];
            if ("+".equals(cur) || "-".equals(cur) || "*".equals(cur) || "/".equals(cur)){
                int n2 = list.getLast();
                list.removeLast();
                int n1 = list.getLast();
                list.removeLast();
                int n = 0;
                switch (cur){
                    case "+":n = n1+n2;break;
                    case "-":n = n1-n2;break;
                    case "*":n = n1*n2;break;
                    case "/":n = n1/n2;break;
                }
                list.addLast(n);
            }else {
                list.add(Integer.parseInt(cur));
            }
        }
        return list.getFirst();
    }
}
举报

相关推荐

0 条评论