224. Basic Calculator
https://leetcode.com/problems/basic-calculator/
Input: s = "1 + 1"
Output: 2Input: s = " 2-1 + 2 "
Output: 3Input: s = "(1+(4+5+2)-3)+(6+8)"
Output: 23Solution:
Last updated
https://leetcode.com/problems/basic-calculator/
Input: s = "1 + 1"
Output: 2Input: s = " 2-1 + 2 "
Output: 3Input: s = "(1+(4+5+2)-3)+(6+8)"
Output: 23Last updated
class Solution {
public int calculate(String s) {
Deque<Character> deque = new LinkedList<>();
for(int i = 0; i < s.length(); i++){
//入队的时候就把空格排除在外,省的接下来再额外判断
if(s.charAt(i) != ' '){
deque.addLast(s.charAt(i));
}
}
return helper(deque);
}
private int helper(Deque<Character> deque){
Deque<Integer> stack = new LinkedList<>();
char sign = '+';
int num = 0;
while(deque.size() > 0){
char c = deque.removeFirst();
if(isdigit(c)){
num = num * 10 + (c - '0');
}
if(c == '('){
num = helper(deque);
}
if(!isdigit(c) || deque.size() == 0){
if(sign == '+'){
stack.addLast(num);
}else if(sign == '-'){
stack.addLast(-num);
}else if(sign == '*'){
int pre = stack.removeLast();
stack.addLast(pre*num);
}else if(sign == '/'){
int pre = stack.removeLast();
stack.addLast(pre/num);
}
num = 0;
sign = c;
}
if(c == ')'){
break;
}
}
int res = 0;
while(stack.size() > 0){
int top = stack.removeLast();
res += top;
}
return res;
}
private boolean isdigit(char c){
if(c >= '0' && c <= '9'){
return true;
}
return false;
}
}class Solution {
public int calculate(String s) {
Deque<Character> queue = new LinkedList<>();
for(int i = 0; i< s.length(); i++)
{
if(s.charAt(i) != ' ')
{
queue.addLast(s.charAt(i));
}
}
return helper(queue);
}
public int helper(Deque<Character> queue)
{
Deque<Integer> stack = new LinkedList<>();
int num = 0;
char preSign = '+';
while(queue.size() > 0)
{
char current = queue.removeFirst();
if(isNumber(current))
{
num = num * 10 + (current - '0');
}
if(current == '(')
{
num = helper(queue);
}
if(!isNumber(current) || queue.size() == 0)
{
switch(preSign)
{
case '+': stack.push(num); break;
case '-': stack.push(-num); break;
}
preSign = current;
num = 0;
}
if(current == ')') break;
}
int res = 0;
while(stack.size() > 0)
{
res += stack.removeLast();
}
return res;
}
public boolean isNumber(char c)
{
return c >= '0' && c <= '9';
}
}public class Solution {
/**
* @param s: the given expression
* @return: the result of expression
*/
public int calculate(String s) {
Stack<Integer> stack = new Stack<Integer>();
int result = 0;
int number = 0;
int sign = 1;
for (int i = 0; i < s.length(); i ++) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
number = 10 * number + (int)(c - '0');
} else if (c == '+') {
result += sign * number;
number = 0;
sign = 1;
} else if (c == '-') {
result += sign * number;
number = 0;
sign = -1;
} else if (c == '(') {
//we push the result first, then sign;
stack.push(result);
stack.push(sign);
//reset the sign and result for the value in the parenthesis
sign = 1;
result = 0;
} else if (c == ')') {
result += sign * number;
number = 0;
result *= stack.pop(); //stack.pop() is the sign before the parenthesis
result += stack.pop(); //stack.pop() now is the result calculated before the parenthesis
}
}
if (number != 0) {
result += sign * number;
}
return result;
}
}