for char in expression: if char.isdigit(): num=num * 10 + int(char) if char in '+-*/' or char==expression[-1]: if sign=='+': stack.append(num) elif sign=='-': stack.append(-num) elif sign=='*': stack.append(stack.pop() * num) elif sign=='/': stack.append(int(stack.pop() / num)) sign=char num=0
Implement a basic calculator to evaluate a simple expression string.
The expression string contains onlynon-negativeintegers,+,-,*,/operators and empty spaces. The integer division should truncate toward zero.
Example 1:
Input: "3+2*2"
Output: 7
Example 2:
Input: " 3/2 "
Output: 1
Example 3:
Input: " 3+5 / 2 "
Output: 5
Note:
You may assume that the given expression is always valid.
Do notuse theevalbuilt-in library function.
Approach #1: Stack. [Java]
class Solution {
public int calculate(String s) {
if (s == null || s.length() == 0) return 0;
Stack<Integer> stack = new Stack();
s += ‘+‘;
char op = ‘+‘;
for (int i = 0, n = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (c >= ‘0‘ && c <= ‘9‘) { n = n * 10 + c - ‘0‘; continue; }
if (c == ‘ ‘) continue;
if (op == ‘+‘) stack.push(n);
else if (op == ‘-‘) stack.push(-n);
else if (op == ‘*‘) stack.push(stack.pop() * n);
else if (op == ‘/‘) stack.push(stack.pop() / n);
op = c;
n = 0;
}
int ret = 0;
while (!stack.empty())
ret += stack.pop();
return ret;
}
}
for char in expression: if char.isdigit(): num=num * 10 + int(char) if char in '+-*/' or char==expression[-1]: if sign=='+': stack.append(num) elif sign=='-': stack.append(-num) elif sign=='*': stack.append(stack.pop() * num) elif sign=='/': stack.append(int(stack.pop() / num)) sign=char num=0
Implement a basic calculator to evaluate a simple expression string.
The expression string contains onlynon-negativeintegers,+,-,*,/operators and empty spaces. The integer division should truncate toward zero.
Example 1:
Input: "3+2*2"
Output: 7
Example 2:
Input: " 3/2 "
Output: 1
Example 3:
Input: " 3+5 / 2 "
Output: 5
Note:
You may assume that the given expression is always valid.
Do notuse theevalbuilt-in library function.
Approach #1: Stack. [Java]
class Solution {
public int calculate(String s) {
if (s == null || s.length() == 0) return 0;
Stack<Integer> stack = new Stack();
s += ‘+‘;
char op = ‘+‘;
for (int i = 0, n = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (c >= ‘0‘ && c <= ‘9‘) { n = n * 10 + c - ‘0‘; continue; }
if (c == ‘ ‘) continue;
if (op == ‘+‘) stack.push(n);
else if (op == ‘-‘) stack.push(-n);
else if (op == ‘*‘) stack.push(stack.pop() * n);
else if (op == ‘/‘) stack.push(stack.pop() / n);
op = c;
n = 0;
}
int ret = 0;
while (!stack.empty())
ret += stack.pop();
return ret;
}
}