算法-字符串-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)!