欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 算法-字符串-227.基本计算器||

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

2025/3/17 0:03:41 来源:https://blog.csdn.net/2301_76799207/article/details/144327700  浏览:    关键词:算法-字符串-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;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词