zoukankan      html  css  js  c++  java
  • 算法——模拟四则运算

    给定一个包含正整数、加(+)、减(-)、乘( * )、除(/)的算数表达式(括号除外),计算其结果。
    表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
    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;
        }
    }
    
  • 相关阅读:
    经典分水岭算法的 C++ 实现
    一个简易的键盘按键测试程序
    工程优化方法中的“最速下降法”和“DFP拟牛顿法”的 C 语言实现
    基于哈夫曼编码的压缩解压程序(C 语言)
    博客选择:博客园 or CSDN
    Spring总结
    CSS总结
    EL表达式总结
    Jdbc总结
    hibernate总结
  • 原文地址:https://www.cnblogs.com/lippon/p/14117638.html
Copyright © 2011-2022 走看看