算法——模拟四则运算

给定一个包含正整数、加(+)、减(-)、乘( * )、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
leetcode

解题思路:模拟CPU进行运算的方式,利用栈的思想。遍历字符串,如果遇到符号,则读取下一个数字,然后判断符号。

  • 如果是乘除,那么直接拿这个数字和栈顶元素运算。
  • 如果是减号,则将当前元素变为负数。
  • 如果是加号,则不操作。

运算完成符号之后,再将处理过的数值放到栈顶。

最后完成遍历,将栈中的元素都累加即可。

class Solution {
    public int calculate(String s) {
        Deque<Integer> stack = new LinkedList<>();
        s = s.trim();
        int ans = 0, i = 0;
        while(i < s.length()) {
            char temp = s.charAt(i);
            if(temp == ' ') {
                i ++;
                continue;
            }

            if(temp < '0' || temp > '9') {
                i++;
                while(i < s.length() && s.charAt(i) == ' ') i++;
            }

            int cur = i;
            while(i < s.length() && Character.isDigit(s.charAt(i))) {
                i++;
            }
            int num = Integer.parseInt(s.substring(cur, i));

            if(temp == '-') {
                num = -num;
            } else if(temp == '*') {
                num = stack.pop() * num;
            } else if(temp == '/') {
                num = stack.pop() / num;
            }

            stack.push(num);
        }

        while(!stack.isEmpty()) ans += stack.pop();

        return ans;
    }
}
原文地址:https://www.cnblogs.com/lippon/p/14117638.html