LeetCode 227. 基本计算器 II
Posted 数据结构和算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 227. 基本计算器 II相关的知识,希望对你有一定的参考价值。
截止到目前我已经写了 500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
public int calculate(String s) {
//记录每个数字前面的符号,如果是乘法和除法就直接和前面的数字运算,
//然后在存放到栈中,如果是加法和减法直接存放到栈中
int preSign = '+';
Stack<Integer> stack = new Stack<>();
int length = s.length();
for (int i = 0; i < length; i++) {
int ch = s.charAt(i);
if (ch == ' ')//过滤掉空格
continue;
//如果是数字
if (ch >= '0' && ch <= '9') {
//找到连续的数字字符串,把它转化为整数
int num = 0;
while (i < length && (ch = s.charAt(i)) >= '0' && ch <= '9') {
num = num * 10 + ch - '0';
i++;
}
//这个是为了抵消上面for循环中的i++
i--;
//乘法和除法,运算之后在存放到栈中。加法和减法直接存放到栈中
if (preSign == '*') {
stack.push(num * stack.pop());
} else if (preSign == '/') {
stack.push(stack.pop() / num);
} else if (preSign == '+') {
stack.push(num);
} else if (preSign == '-') {
stack.push(-num);
}
} else {//记录前一个的符号
preSign = ch;
}
}
//把栈中的所有元素都取出来,计算他们的和
int res = 0;
while (!stack.empty()) {
res += stack.pop();
}
return res;
}
以上是关于LeetCode 227. 基本计算器 II的主要内容,如果未能解决你的问题,请参考以下文章