Leetcode每日一题

324 阅读1分钟

1.Leetcode 277题 计算器求值

实现一个基本的计算器来计算一个简单的字符串表达式的值。  

字符串表达式仅包含非负整数,+, - ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。 示例 1: 输入: "3+22" 

输出: 7 

示例 2: 输入: " 3/2 " 

输出: 1 

示例 3: 输入: " 3+5 / 2 " 

输出: 5  

public int calculate1(String s) {
        Stack<Integer> stack = new Stack<>();
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length;i++){
            char lastOps = '+';
            if (chars[i] == ' ') continue;
            if (Character.isDigit(chars[i])){
                int temp = chars[i] - '0';
                while (++i < chars.length && Character.isDigit(chars[i])){
                    temp = temp * 10 + chars[i] - '0';
                }
                i--;
                if (lastOps == '+')
                    stack.push(temp);
                else if (lastOps == '-') stack.push(-temp);
                else stack.push(helper(lastOps , stack.pop(),temp));

            }else {
                lastOps = chars[i];
            }

        }
        int res = 0;
        while (!stack.isEmpty()){
            res += stack.pop();
        }
        return res;
    }

    public int helper(char lastOps , int i , int j){
        if (lastOps == '*'){
            return i * j;
        }else {
            return i / j;
        }
    }

2.leetcode 150题 

逆波兰表达式求值

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

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

输入: ["2", "1", "+", "3", "*"]
输出: 9
解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

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