LeetCode-227. Basic Calculator II (JAVA)实现计算器 II
2017-04-30 09:54
369 查看
227. Basic Calculator II
Implement a basic calculator to evaluate a simple expression string.The expression string contains only
non-negative integers,
+,
-,
*,
/operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7 " 3/2 " = 1 " 3+5 / 2 " = 5
Note: Do not use the
evalbuilt-in library function.
设计一个计算器,输入有效,并且只含有
+,
-,
*,
/,空格,全是非负整数
使用栈,栈内存的是所有的中间结果,最后把站内数据加起来,就是最终结果
// 支持"-1 * 5"但不支持"-1 * +5"
public int calculate(String s) {
int len;
if (s == null || (len = s.length()) == 0)
return 0;
Stack<Integer> stack = new Stack<Integer>();
int num = 0;// sign记录本次数字之前的上一个运算符,初始值为'+',
char sign = '+';
for (int i = 0; i < len; i++) {
if (Character.isDigit(s.charAt(i))) {
num = num * 10 + s.charAt(i) - '0';
}// 先乘除后加减
if ((!Character.isDigit(s.charAt(i))// 非空格
&& ' ' != s.charAt(i))// 到达字符串结束处,需要计算最后一次结果
|| i == len - 1) {// 加减不计算结果,直接压入栈,运算符优先级
if (sign == '-') {
stack.push(-num);
}
if (sign == '+') {
stack.push(num);
}// 乘除从栈中弹出一个数字计算结果,在压入栈
if (sign == '*') {
stack.push(stack.pop() * num);
}
if (sign == '/') {
stack.push(stack.pop() / num);
}
sign = s.charAt(i);
num = 0;
}
}
int res = 0;
for (int i : stack) {
res += i;
}
return res;
}使用变量存储结果
public int calculate(String s) {
int res = 0, pre = 0, curr = 0;
char sign = '+';
char[] array = s.trim().toCharArray();
for (int i = 0; i <= array.length; i++) {
if (i != array.length
&& Character.isDigit(array[i]))
curr = curr * 10 + array[i] - '0';
else {
if (i != array.length && array[i] == ' ')
continue;
if (sign == '+') {
res += curr;
pre = curr;
}
if (sign == '-') {
res -= curr;
pre = -curr;
}
if (sign == '*') {// 之前多加了一个pre(本身包括正负),现在减去
res = res - pre + pre * curr;
pre = pre * curr;
}
if (sign == '/') {
res = res - pre + pre / curr;
pre = pre / curr;
}
curr = 0;
if (i != array.length)
sign = array[i];
}
}
return res;
}
相关文章推荐
- 227. Basic Calculator II | Java最短代码实现
- LeetCode 227. Basic Calculator II(基本计算器II)
- [LeetCode] 227. Basic Calculator II 基本计算器 II
- Leetcode 227. Basic Calculator II JAVA语言
- [LeetCode]227. Basic Calculator II
- LeetCode 227. Basic Calculator II 解题报告【python】
- LeetCode 227. Basic Calculator II
- [LeetCode] Basic Calculator II 基本计算器之二
- [leetcode] 227.Basic Calculator II
- leetcode227-Basic Calculator II(简单计算器的实现)
- leetcode 227. Basic Calculator II
- Leetcode 227. Basic Calculator II
- leetcode 227. Basic Calculator II
- Leetcode 227. Basic Calculator II
- leetcode 227. Basic Calculator II
- leetcode227. Basic Calculator II
- 【LeetCode】227. Basic Calculator II
- LeetCode 227. Basic Calculator II
- Leetcode 227. Basic Calculator II
- 【Leetcode】227. Basic Calculator II