Basic Calculator II LeetCode Solution

Here, We see Basic Calculator II problem Solution. This Leetcode problem done in many programming language like C++, Java, JavaScript, Python etc. with different approach.

Basic Calculator II LeetCode Solution

Basic Calculator II LeetCode Solution

Problem Statement ->

Given a string which represents an expression, evaluate this expression and return its value. 

The integer division should truncate toward zero.

You may assume that the given expression is always valid. All intermediate results will be in the range of [-231, 231 – 1].

Example 1:
Input: s = "3+2*2"
Output: 7

Example 2:
Input: s = " 3/2 "
Output: 1

Example 3:
Input: s = " 3+5 / 2 "
Output: 5

Basic Calculator II C++ Solution ->

class Solution { public: int calculate(string s) { istringstream in('+' + s + '+'); long long total = 0, term = 0, n; char op; while (in >> op) { if (op == '+' or op == '-') { total += term; in >> term; term *= 44 - op; } else { in >> n; if (op == '*') term *= n; else term /= n; } } return total; } };
Code language: C++ (cpp)

Basic Calculator II Java Solution ->

class Solution { public int calculate(String s) { if (s == null || s.length() == 0) return 0; int num = 0, tmp = 0, res = 0; char op = '+'; for (char c : s.toCharArray()) { if (Character.isDigit(c)) { tmp = tmp*10 + c - '0'; } else if (c != ' ') { //process the numerical value of string so far; based on what 'op' we have before it num = cal(num, tmp, op); if (c == '+' || c == '-') { res += num; num = 0; } // reset tmp = 0; op = c; } } return res + cal(num, tmp, op); } private int cal(int num, int tmp, char op) { if (op == '+') return num + tmp; else if (op == '-') return num - tmp; else if (op == '*') return num * tmp; else return num / tmp; } }
Code language: Java (java)

Basic Calculator II JavaScript Solution ->

var calculate = function(s) { let stack = []; let num = ''; let sign = null // we loop till the full length of the array to account for last sign for(let i = 0; i <= s.length; i++){ const curr = s[i]; //handle space if(curr === ' ') continue; //if char is a number if(!isNaN(curr)) num+=curr; //if we have a sign + - / * if(isNaN(curr)){ num = Number(num) switch(sign){ case '+': case null: //we push the initial number into the stack stack.push(num) break; case '-': //we push any values after the subtraction sign as negative stack.push(-num) break; case '*': //we pop the stack then multiply and push back stack.push(stack.pop()*num) break; case '/': //we pop the stack then devide and push back stack.push(parseInt(stack.pop()/num, 10)) break; } // sign becomes current sign sign = curr; // we reset num num = ''; } } //we reduce the array adding positive and negative numbers return stack.reduce((a,b)=>{ return a+b },0) };
Code language: JavaScript (javascript)

Basic Calculator II Python Solution ->

class Solution: def calculate(self, s: str) -> int: num = 0 res = 0 pre_op = '+' s+='+' stack = [] for c in s: if c.isdigit(): num = num*10 + int(c) elif c == ' ': pass else: if pre_op == '+': stack.append(num) elif pre_op == '-': stack.append(-num) elif pre_op == '*': operant = stack.pop() stack.append((operant*num)) elif pre_op == '/': operant = stack.pop() stack.append(math.trunc(operant/num)) num = 0 pre_op = c return sum(stack)
Code language: Python (python)

Leave a Comment

Your email address will not be published. Required fields are marked *