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;
        }
    }
    
  • 相关阅读:
    着迷英语900句总结
    SQL Server 常见数据类型
    SQL Server视频总结
    第三次SLA文档学习
    Rosetton Stone Summary
    【周总结】2018-10-19—2018-11-25
    学生信息管理系统总结
    VB中 EOF 和 BOF 的区别
    VB中 On error 的用法
    VB中 . 与 ! 的区别
  • 原文地址:https://www.cnblogs.com/lippon/p/14117638.html
Copyright © 2011-2022 走看看