diff --git a/solution/0700-0799/0772.Basic Calculator III/README.md b/solution/0700-0799/0772.Basic Calculator III/README.md index 3a7dd9aabbe76..4606d3882c084 100644 --- a/solution/0700-0799/0772.Basic Calculator III/README.md +++ b/solution/0700-0799/0772.Basic Calculator III/README.md @@ -73,7 +73,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 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 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