Leetcode 772. Basic Calculator III

Implement a basic calculator to evaluate a simple expression string.

The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

The expression string contains only non-negative integers, +-*/ operators , open ( and closing parentheses ) and empty spaces . 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 [-2147483648, 2147483647].

Some examples:

"1 + 1" = 2
" 6-4 / 2 " = 4
"2*(5+5*2)/3+(6/2+8)" = 21
"(2+6* 3+5- (3*14/7+2)*5)+3"=-12

Note: Do not use the eval built-in library function.

My Python Solution by referring to Grandyang‘s post: https://www.cnblogs.com/grandyang/p/8873471.html

 1 class Solution:
 2     def getRes(self, resSoFar, sign, num):
 3         if sign == ‘+‘:
 4             return resSoFar + num
 5         elif sign == ‘-‘:
 6             return resSoFar - num
 7         elif sign == ‘*‘:
 8             return resSoFar * num
 9         elif sign == ‘/‘:
10             return int(resSoFar / num)
11
12     def calculate(self, s: str) -> int:
13         sign = ‘+‘ # store the previous sign
14         num = 0 # store current num passed
15         resCur = 0 # store current res from "*/" operations
16         res = 0 # store the global result
17         n = len(s)
18         i = 0
19         while i < n:
20             ch = s[i]
21             if ch.isdigit(): # get current number
22                 num = num*10 + int(ch)
23             elif ch == ‘(‘: # start the left parenthesis
24                 cnt = 1
25                 j = i + 1
26                 while j < n:
27                     if s[j] == ‘(‘:
28                         cnt += 1
29                     elif s[j] == ‘)‘:
30                         cnt -= 1
31                     if cnt == 0: # closing right parenthesis just passed
32                         num = self.calculate(s[i+1:j]) # update num or resCur?
33                         break # 这个break不能忘了!
34                     j += 1
35                 i = j
36             # 下面这个Trick(用if而不是用elif) 非常重要,否则 i==n-1 下不来!
37             if ch in "+-*/" or i == n - 1: # Take action - process previous number and sign
38                 resCur = self.getRes(resCur, sign, num) # get current result by combining resCur and num # -4, -2
39                 if ch in "+-" or i == n - 1: # collapse the local w/ the global result iff it‘s "+-" and i==n-1
40                     res += resCur # 6 - 4
41                     resCur = 0
42                 sign = ch
43                 num = 0
44             i += 1
45
46         return res

原文地址:https://www.cnblogs.com/uicoder/p/10468689.html

时间: 2024-10-07 04:12:41

Leetcode 772. Basic Calculator III的相关文章

Leetcode solution 772: Basic Calculator III

Problem Statement Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces . The expression string cont

Lintcode: Expression Evaluation (Basic Calculator III)

Given an expression string array, return the final result of this expression Have you met this question in a real interview? Yes Example For the expression 2*6-(23+7)/(1+2), input is [ "2", "*", "6", "-", "(&qu

[LeetCode][JavaScript]Basic Calculator

Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces . You may assume that the giv

【Leetcode】Basic Calculator II

题目链接:https://leetcode.com/problems/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 s

【Leetcode】Basic Calculator

题目链接:https://leetcode.com/problems/basic-calculator/ 题目: Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and em

Leetcode 227. Basic Calculator II JAVA语言

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 ex

[LeetCode#227] Basic Calculator II

Problem: 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

Java for LeetCode 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 ex

LeetCode OJ Basic Calculator II

Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: string trans_to_postfix_expression_to_s(string); // 将得到的表达式转化为后缀表达式 long long int calculate_from_postfix_expression(); // 根据后缀表达式计算值 private: vector<string