计算器(力扣)


title: 计算器
date: 2022-04-18 15:15:13
tags: 每天进步一点点系列


每日题目

题目:计算器

给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例:

示例 1:

输入: “3+2*2”
输出: 7

示例 2:

输入: " 3/2 "
输出: 1

示例 3:

输入: " 3+5 / 2 "
输出: 5

说明:

你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。

小坑,字符串里有空格,需要替换掉

代码:

class Solution {
    
    
    public int calculate(String s) {
    
    
        s =s.replaceAll(" ","");
        Deque<Integer> stack = new ArrayDeque<>();
        //先把第一个加进去
        char flag = '+';
        //数字的初始值
        int num = 0;
        for(int i=0;i<s.length();i++){
    
    
            //转换成数字
            if(Character.isDigit(s.charAt(i))){
    
    
                num = num*10+s.charAt(i)-'0';
            }
            //根据符号进行运行,就是*和/,优先级高,先把栈中的数字拿出来,运算后放进去
            if(!Character.isDigit(s.charAt(i)) || i==s.length()-1){
    
    
                if(flag=='+'){
    
    
                    stack.push(num);
                }else if(flag=='-'){
    
    
                    stack.push(-num);
                }else if(flag=='*'){
    
    
                    stack.push(stack.pop()*num);
                }else if(flag=='/'){
    
    
                    stack.push(stack.pop()/num);
                }
                flag = s.charAt(i);
                num =0;
            }

        }
        //遍历栈,累加结果
        int res =0;
        while(!stack.isEmpty()){
    
    
            res += stack.pop();
        }

        return res;


    }
}

以上就是计算器的全部内容

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/

看完如果对你有帮助,感谢点击下面的一键三连支持!
[哈哈][抱拳]

请添加图片描述在这里插入图片描述
加油!

共同努力!

Keafmd

都看到这里了,下面的内容你懂得,让我们共同进步!

猜你喜欢

转载自blog.csdn.net/weixin_43883917/article/details/124250737