java leetcode之[数据结构 中等]227. 基本计算器 II

这篇博客详细解析了如何利用栈解决LeetCode上的基本计算器II问题。作者通过将输入字符串转换并处理,利用栈来处理加、减、乘、除四种运算,最终计算并返回表达式的值。代码中展示了具体的实现过程,包括如何处理符号和数值的转换。
摘要由CSDN通过智能技术生成

题目的链接在这里:https://leetcode-cn.com/problems/basic-calculator-ii/


题目大意

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。


一、示意图

在这里插入图片描述

二、解题思路

使用栈

代码如下:

class Solution {
    public int calculate(String s) {
        //一个新的方法就是把栈里所有的数值都算作加法的
        char[] chars = s.toCharArray();
        Stack<Integer> stack=new Stack<>();
        //把字符从 比如 17+6*7 变成 +17+6*7
        //所以用来判断 每次如果是数值进入的话 就进行累计 如果是字符或者到最后一个点了的话
        //就进行字符运算 为什么-的话 就可以直接负数进去呢7-6*6 也就等于 7-36是吧
        //初始化为+
        char sign='+';
        int num=0;
        for(int i=0;i<chars.length;i++){
            //开始判读
            if(chars[i]>='0'){
                //说明是数值
                //那就先进行存储
                //这里先进行-‘0’再加是为了防止溢出
                num=num*10-'0'+chars[i];
            }
            if((chars[i]<'0'&&chars[i]!=' ')||i==chars.length-1){
                //那就通过上一个符号来判断这个符号是干嘛的
                //比如 +7/5+6 到/的时候 就需要把前面的+7进行判断了 然后把这个/作为新的更新
                switch (sign){
                    case '+':
                        //如果是加法就直接进栈
                        stack.push(num);
                        break;
                    case '-':
                        //如果是减法就变成负数 然后进栈
                        stack.push(-num);
                        break;
                    case '*':
                        //如果是乘法 那就需要进行判断了 那就是把栈顶元素出栈 然后和这个num进行操作在进栈
                        stack.push(stack.pop()*num);
                        break;
                    case '/':
                        //也和乘法一样
                        stack.push(stack.pop()/num);
                        break;
                }
                //一次操作之后这个时候 数值也已经精湛了 就新建更新就好了
                sign=chars[i];
                //num也要更新
                num=0;

            }
        }
        //然后就是把所有的值加起来就好了
        int result=0;
        while (!stack.isEmpty()){
            result+=stack.pop();

        }
        return result;

    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值