自学内容网 自学内容网

算法-字符串-227.基本计算器||

一、题目

二、思路解析

        1.思路:

             使用解决;

             使最后压入栈中的数值它们最终的运算关系是“+”!!!

        2.常用方法:

                1.Character.isDigit(“1”);判断一个给定的字符是否为数字字符(0 - 9

Character.isDigit(ch)

                2.replaceAll(参数1,参数2);将字符串中的参数1全部替换为参数2

s=s.replaceAll("  ","");

 

        3.核心逻辑:

                1.去除掉字符串中的空格

s=s.replaceAll("  ","");

                2.特殊情况处理,当字符串为空或不存在则直接返回值0

if(s==null||s.length()==0)return 0;

                 3.一般情况:对字符串进行循环,判断当前字符是否为数字字符;如果是,即存储该数值;如果不是,即为运算符

                针对不同的运算符有不同的处理方式:

                        a.加法:直接压入栈中

                        b.减法:压入栈中的值取反

                        c.乘法:将栈顶元素弹出并于当前所记录的数值进行*,然后在压入栈中

                        d.除法:将栈顶元素弹出并于当前所记录的数值进行/,然后在压入栈中

                √.注意事项:

                        a.压入栈中的数值的时机是遍历到其后面的运算符

                        b.特殊的情况在于遍历到该字符串的最后一个字符时,必然是数字字符,所以当i==s.length()-1成立时,也会触发压入操作

三、代码实现

class Solution {
    public int calculate(String s) {
          // 去除空格
        s = s.replaceAll(" ", "");
        char[] charArray = s.toCharArray();
        int n = charArray.length;
        // 用于存储操作数
        Stack<Integer> stack = new Stack<>();
        // 当前数字
        int num = 0;
        // 上一个运算符,初始化为'+'
        char op = '+';
        for (int i = 0; i < n; i++) {
            char c = charArray[i];
            if (Character.isDigit(c)) {
                num = num * 10 + (c - '0');
            }
            if (!Character.isDigit(c) || i == n - 1) {
                switch (op) {
                    case '+':
                        stack.push(num);
                        break;
                    case '-':
                        stack.push(-num);
                        break;
                    case '*':
                        stack.push(stack.pop() * num);
                        break;
                    case '/':
                        stack.push(stack.pop() / num);
                        break;
                }
                num = 0;
                if (i < n - 1) {
                    op = c;
                }
            }
        }
        // 计算栈中所有元素的和
        int result = 0;
        while (!stack.isEmpty()) {
            result += stack.pop();
        }
        return result;
    }
}


原文地址:https://blog.csdn.net/2301_76799207/article/details/144327700

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!