iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
自我挑戰組

每日LeetCode解題紀錄系列 第 11

LeetCode解題 Day11

  • 分享至 

  • xImage
  •  

224. Basic Calculator

https://leetcode.com/problems/basic-calculator/


題目解釋

你會得到一個字串s ,這個字串是一組算式,請回傳算式計算的結果

example

https://i.imgur.com/EzRc51S.png

解法

這題比較麻煩的是它有括號需要處理,幸運的是他的字串不會出現乘除;因此,括號前面的負號是我們要煩惱的

這題的解法是用堆疊(stack),把目前累積的結果和括號前面的正負號儲存起來

等括號內的計算完成後,就把存起來的東西取出來並加在目前累積的結果

程式碼

class Solution:
    def calculate(self, s: str) -> int:
        
        stack = []
        operation = '+' 
        num = 0
        ans = 0
        
        for i in range(len(s)):
            current = s[i]
            
            if current.isdigit():
                num = num * 10 + int(current)
            
            elif current in '+-':
                
                if operation == '+':
                    ans += num
                else:
                    ans -= num
                
                operation = current
                num = 0
            
            elif current == '(':
                stack.append(ans)
                stack.append(operation)
                operation = '+'
                num = 0
                ans = 0
            
            elif current == ')':
                
                if operation == '+':
                    ans += num
                else:
                    ans -= num
                
                operation = stack.pop()
                if operation == '-':
                    ans *= -1
                ans += stack.pop()
                num = 0
        
        
        if operation == '+':
            ans += num
        else:
            ans -= num
        return ans

不過這樣的程式碼不好修改成能處理乘除法

所以比較好的解答,應該是要在遇到括號時就呼叫自己(self.calculate),並個別回傳括號內的結果


閒聊

今天的題目因為不用處理乘除所以還算簡單

大學剛學stack時也有練習過類似的題目

話說這兩天有颱風要來了,大家注意平安和防水囉!


上一篇
LeetCode解題 Day10
下一篇
LeetCode解題 Day12
系列文
每日LeetCode解題紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言