From ef684ed7214bb403ad4e64fef8da694b7a1c23ae Mon Sep 17 00:00:00 2001 From: fxrc Date: Wed, 19 Feb 2025 14:55:25 -0800 Subject: [PATCH 1/5] add 772 py3 --- .../0772.Basic Calculator III/README.md | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/solution/0700-0799/0772.Basic Calculator III/README.md b/solution/0700-0799/0772.Basic Calculator III/README.md index 3a7dd9aabbe76..ef5bfb57abd48 100644 --- a/solution/0700-0799/0772.Basic Calculator III/README.md +++ b/solution/0700-0799/0772.Basic Calculator III/README.md @@ -73,7 +73,34 @@ tags: #### Python3 ```python - +class Solution: + def calculate(self, s: str) -> int: + def dfs(q): + num, sign = 0, "+" + stk = [] + while q: + c = q.popleft() + if c.isdigit(): + num = num * 10 + int(c) + if c == "(": + num = dfs(q) + if c in "+-*/)" or not q: + #! careful we catch ')' to eval (...), ow (4-5/2) will only be sum([4,-5]) => -1, /2 is ignored + if sign == "+": + stk.append(num) + elif sign == "-": + stk.append(-num) + elif sign == "*": + stk.append(stk.pop() * num) + elif sign == "/": + stk.append(int(stk.pop() / num)) + sign = c + num = 0 + if c == ")": + break + return sum(stk) + + return dfs(deque(s)) ``` #### Java From d7e5e351a5d5a9340e01c1fd11d564b7ec19f0a0 Mon Sep 17 00:00:00 2001 From: fxrc Date: Wed, 19 Feb 2025 15:22:00 -0800 Subject: [PATCH 2/5] cleanup 772 syntax --- .../0772.Basic Calculator III/README.md | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/solution/0700-0799/0772.Basic Calculator III/README.md b/solution/0700-0799/0772.Basic Calculator III/README.md index ef5bfb57abd48..7b0ebfe3853af 100644 --- a/solution/0700-0799/0772.Basic Calculator III/README.md +++ b/solution/0700-0799/0772.Basic Calculator III/README.md @@ -76,30 +76,27 @@ tags: class Solution: def calculate(self, s: str) -> int: def dfs(q): - num, sign = 0, "+" - stk = [] + num, sign, stk = 0, "+", [] while q: c = q.popleft() if c.isdigit(): - num = num * 10 + int(c) - if c == "(": + num = num*10 + int(c) + if c == '(': num = dfs(q) - if c in "+-*/)" or not q: - #! careful we catch ')' to eval (...), ow (4-5/2) will only be sum([4,-5]) => -1, /2 is ignored - if sign == "+": - stk.append(num) - elif sign == "-": - stk.append(-num) - elif sign == "*": - stk.append(stk.pop() * num) - elif sign == "/": - stk.append(int(stk.pop() / num)) - sign = c - num = 0 + if c in '+-*/)' or not q: + match sign: + case "+": + stk.append(num) + case "-": + stk.append(-num) + case "*": + stk.append(stk.pop()*num) + case "/": + stk.append(int(stk.pop()/num)) + num, sign = 0, c if c == ")": break return sum(stk) - return dfs(deque(s)) ``` From 0f385a7829a8ca6aaa1550ecab9914364b29fa3e Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Thu, 20 Feb 2025 08:31:25 +0800 Subject: [PATCH 3/5] Format code in README.md for consistency --- .../0700-0799/0772.Basic Calculator III/README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/solution/0700-0799/0772.Basic Calculator III/README.md b/solution/0700-0799/0772.Basic Calculator III/README.md index 7b0ebfe3853af..4606d3882c084 100644 --- a/solution/0700-0799/0772.Basic Calculator III/README.md +++ b/solution/0700-0799/0772.Basic Calculator III/README.md @@ -80,23 +80,24 @@ class Solution: while q: c = q.popleft() if c.isdigit(): - num = num*10 + int(c) - if c == '(': + num = num * 10 + int(c) + if c == "(": num = dfs(q) - if c in '+-*/)' or not q: + if c in "+-*/)" or not q: match sign: case "+": stk.append(num) case "-": stk.append(-num) case "*": - stk.append(stk.pop()*num) + stk.append(stk.pop() * num) case "/": - stk.append(int(stk.pop()/num)) + stk.append(int(stk.pop() / num)) num, sign = 0, c if c == ")": break return sum(stk) + return dfs(deque(s)) ``` From afe46d73f6b143fcadfb93704f1fb3af7eea5905 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Thu, 20 Feb 2025 08:31:43 +0800 Subject: [PATCH 4/5] Add Python3 solution to README_EN.md --- .../0772.Basic Calculator III/README_EN.md | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/solution/0700-0799/0772.Basic Calculator III/README_EN.md b/solution/0700-0799/0772.Basic Calculator III/README_EN.md index 82619b07a78c1..ea63a44f76157 100644 --- a/solution/0700-0799/0772.Basic Calculator III/README_EN.md +++ b/solution/0700-0799/0772.Basic Calculator III/README_EN.md @@ -71,7 +71,32 @@ tags: #### Python3 ```python - +class Solution: + def calculate(self, s: str) -> int: + def dfs(q): + num, sign, stk = 0, "+", [] + while q: + c = q.popleft() + if c.isdigit(): + num = num * 10 + int(c) + if c == "(": + num = dfs(q) + if c in "+-*/)" or not q: + match sign: + case "+": + stk.append(num) + case "-": + stk.append(-num) + case "*": + stk.append(stk.pop() * num) + case "/": + stk.append(int(stk.pop() / num)) + num, sign = 0, c + if c == ")": + break + return sum(stk) + + return dfs(deque(s)) ``` #### Java From bcf65225d5028cba5e15103e98ea448b7f2bec0a Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Thu, 20 Feb 2025 08:32:08 +0800 Subject: [PATCH 5/5] Add Basic Calculator III solution --- .../0772.Basic Calculator III/Solution.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 solution/0700-0799/0772.Basic Calculator III/Solution.py diff --git a/solution/0700-0799/0772.Basic Calculator III/Solution.py b/solution/0700-0799/0772.Basic Calculator III/Solution.py new file mode 100644 index 0000000000000..d2a854468a4e7 --- /dev/null +++ b/solution/0700-0799/0772.Basic Calculator III/Solution.py @@ -0,0 +1,26 @@ +class Solution: + def calculate(self, s: str) -> int: + def dfs(q): + num, sign, stk = 0, "+", [] + while q: + c = q.popleft() + if c.isdigit(): + num = num * 10 + int(c) + if c == "(": + num = dfs(q) + if c in "+-*/)" or not q: + match sign: + case "+": + stk.append(num) + case "-": + stk.append(-num) + case "*": + stk.append(stk.pop() * num) + case "/": + stk.append(int(stk.pop() / num)) + num, sign = 0, c + if c == ")": + break + return sum(stk) + + return dfs(deque(s)) \ No newline at end of file