」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Golang 中的 LeetCode:解析布林表達式

Golang 中的 LeetCode:解析布林表達式

發佈於2024-11-08
瀏覽:362

這是我喜歡解決的 LeetCode 問題之一。我用 Golang 解決了這個問題,而且我已經是一個 Go 新手了,剛開始學習一週。

LeetCode in Golang: Parsing A Boolean Expression

直覺

這個問題是實現計算器程式的另一個版本,該程式接受一個字串並對其進行計算。您必須透過評估內部括號和外部括號來解決問題,直到您得到最終結果。這些問題最好用堆疊來描述,您只需實作一個 CallStack,當開啟新括號時,您將 Push 到堆疊,而當關閉它時,您只需從堆疊中 Pop 。最後關閉時我們呼叫 Eval 來獲得最終結果。

我們的計算器中有3個操作可以完成,並且有一些關於它們的已知事實:

  • AND:在找到假之前都是真(一個假就夠了)
  • OR:在找到 true 之前它是 false(一個 true 就足夠了)
  • Not:與 it 的論證相反。

所以,我們不需要維護每個操作的所有值來知道它的最終結果。 如果我們正在解決AND,只要找到一個是否為假,如果OR,則維持是否找到真值,如果NOT,那麼它已經是一個值,您將評估它的相反值。

方法

我們實作一個自訂結構:CallStack,它有 2 個切片,一個用於操作,一個用於我們要評估的值。
呼叫堆疊有方法:

  • Push:用於將值和操作推送到我們擁有的 2 個切片。操作將新值推送到 2 個切片,並且值(t 或 f)僅修改值切片中最後輸入的值。
  • Pop:從2個切片中刪除最後一個值,使用彈出操作評估彈出的值,並使用結果修改new彈出後的最後一個值。
  • Eval:當它是最後一個右括號時調用,以使用操作切片中的最後一個剩餘操作來評估值切片中的最後一個剩餘值。

一旦發現錯誤,就結束 Ands 的評估,一旦找到 true,就結束對 Ors 的評估,可以進一步優化解決方案,如果您願意,我會將其留給您做:)

複雜

  • 時間複雜度:
    在)

  • 空間複雜度:
    在)

程式碼

type CallStack struct {
    operations []string
    values []int
}

func NewCallStack() *CallStack {
    return &CallStack{
        operations: make([]string, 0),
        values:     make([]int, 0),
    }
}

func (s *CallStack) pushOperation(op string) {
    s.operations = append(s.operations, op)
    var newVal int 
    switch op {
    case Not: 
        newVal = 0
    default: 
        newVal = 1
    }
    s.values = append(s.values, newVal)
}

func (s *CallStack) pushValue(op string, char string) {
    switch op {
    case And: 
        if char == "f" {
            s.values[len(s.values)-1] = -1
        } 
    case Or: 
        if char == "t" {
            s.values[len(s.values)-1] = -1
        } 
    default: // Not
        if char == "t" {
            s.values[len(s.values)-1] = 1
        } else {
            s.values[len(s.values)-1] = -1
        }
    }
}

func (s *CallStack) Push(char string) {
    switch char {
    case Not, And, Or:
        s.pushOperation(char)
    default:
        s.pushValue(s.operations[len(s.operations) - 1], char)
    }
}

func eval(op string, val int) bool {
    switch op {
    case And:
        if val == 1 {
            return true
        } else {
            return false
        }
    case Or:
        if val == -1 {
            return true
        } else {
            return false
        } 
    default: // Not 
        if val 




          

            
        
版本聲明 本文轉載於:https://dev.to/ehab7osam/leetcode-in-golang-parsing-a-boolean-expression-3bl?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • React原始碼中MessageChannel的使用
    React原始碼中MessageChannel的使用
    這篇文章我們分析React原始碼中MessageChannel的用法。 我們先來了解什麼是MessageChannel。 訊息頻道 Channel Messaging API 的 MessageChannel 介面允許我們建立一個新的訊息通道並透過它的兩個 MessagePort...
    程式設計 發佈於2024-11-08
  • 如何在 CSS 中縮排後續換行標籤行?
    如何在 CSS 中縮排後續換行標籤行?
    縮排換行標籤文字的後續行當面臨表單寬度的限制時,標籤文字可以換行到多行,從而美觀的擔憂。雖然第一行由於輸入元素的存在而縮進,但後續行可能不會縮進,從而產生不均勻的外觀。 要僅使用CSS 實現縮排的第二行和後續行,請考慮使用以下方法:要僅使用CSS 實現縮排的第二行和後續行,請考慮使用以下方法:將輸入...
    程式設計 發佈於2024-11-08
  • 如何在CSS中模糊背景影像而不模糊內容?
    如何在CSS中模糊背景影像而不模糊內容?
    CSS 在保持內容清晰度的同時對背景圖像進行模糊處理嘗試在CSS 設定中模糊背景圖像時,通常會遇到內容(文字或其他元素)也變得模糊的問題。這就是 z-index 和偽元素的概念發揮作用的地方。 要模糊背景圖像而不影響內容,可以採用以下方法:創建背景容器:將背景圖像包含在div或其他容器中並為其分配一...
    程式設計 發佈於2024-11-08
  • 啞的
    啞的
    大家好,我是Misti-sage,DOOF的唯一創造者: 動態的 輸出 針對進行了最佳化 靈活性。 (我是編碼新手,所以我的大部分(如果不是全部)DOOF 工作都是由 ChatGPT 協助的。) 我歡迎任何可以幫助改進 DOOF(也稱為 Darfensmirg)的人。 <!DOCTYPE ...
    程式設計 發佈於2024-11-08
  • 為什麼 Go 正規表示式 \\b 邊界對於拉丁字元會失敗?
    為什麼 Go 正規表示式 \\b 邊界對於拉丁字元會失敗?
    \b Go 正規表示式中拉丁文字元的邊界在Go 正規表示式的世界中, \b 邊界選項有一個輕微的怪癖處理拉丁字符時。當嘗試定義包含拉丁字元(例如重音元音和特殊字元)的單字時,就會出現此問題。 考慮以下範例,我們希望使用 \b 邊界選項來匹配單字「vis」:import ( "fmt...
    程式設計 發佈於2024-11-08
  • Node.js 中與 WebSockets 和 Socket.IO 的即時通信
    Node.js 中與 WebSockets 和 Socket.IO 的即時通信
    现代 Web 应用程序通常需要实时通信,无论是聊天系统、实时更新、协作编辑还是通知。传统的 HTTP 通信不足以满足实时应用程序的需要,因为它依赖于请求-响应模式。这就是 WebSockets 发挥作用的地方,它允许服务器和客户端之间进行全双工通信。 在本文中,我们将探讨: WebSocket 是什...
    程式設計 發佈於2024-11-08
  • H2 與 HSQLDB:哪種嵌入式資料庫最適合我的財務管理應用程式?
    H2 與 HSQLDB:哪種嵌入式資料庫最適合我的財務管理應用程式?
    Java 嵌入式資料庫比較鑑於有大量可用選項,為您的財務管理應用程式選擇嵌入式資料庫可能具有挑戰性。為了幫助您,讓我們根據您的需求比較 H2、HSQLDB、Derby 和 Berkeley DB。 H2 與 HSQLDBH2 和 HSQLDB 都提供出色的效能和穩定性。 H2以速度著稱,而HSQLD...
    程式設計 發佈於2024-11-08
  • C 中允許多少級指標間接定址?
    C 中允許多少級指標間接定址?
    C 語言中的指標深度:了解層級限制在 C 程式設計中,變數可以使用指標具有多層間接尋址。這種靈活性允許複雜的資料結構和高效的記憶體管理。然而,問題出現了:單一變數允許的最大指標等級(稱為“*”)是多少? 了解指針深度的限制對於有效和安全的編程至關重要。 C 標準定義了允許的指標等級數的下限,但上限是...
    程式設計 發佈於2024-11-08
  • CORS 可防止哪些錯誤:「Access-Control-Allow-Origin 不允許來源」?
    CORS 可防止哪些錯誤:「Access-Control-Allow-Origin 不允許來源」?
    CORS 防止的錯誤:「Access-Control-Allow-Origin 不允許來源」簡介:跨來源資源共享(CORS) 期間,當用戶端腳本嘗試從與其運行來源不同的來源存取資源。 原因:此錯誤有幾個潛在原因: 同源策略:未經伺服器明確許可, JavaScript 被限制存取其網域之外的資源。此策...
    程式設計 發佈於2024-11-08
  • 光澤和微光讓我的心率下降 - 案例研究
    光澤和微光讓我的心率下降 - 案例研究
    最近,一位客戶聯繫我,詢問其 WordPress 網站上的「財務評估」javascript 應用程式不再運作。它有很多問題,最後,最簡單的方法就是重建它。 在此應用程式中,使用者可以輸入基本的財務和個人訊息,應用程式會告訴他們在財務規劃方面是否走在正確的道路上。這不是超級複雜的邏輯,但有相當多的邏...
    程式設計 發佈於2024-11-08
  • 案例研究:加權九尾問題
    案例研究:加權九尾問題
    加權九尾問題可以簡化為加權最短路徑問題。 部分提出了九尾問題並使用 BFS 演算法解決了它。本節介紹問題的變體並使用最短路徑演算法解決它。 九尾問題是找出導致所有硬幣面朝下的最少移動次數。每一步都會翻轉一枚正面硬幣及其相鄰硬幣。加權九尾問題將翻轉次數指定為每次移動的權重。例如,您可以透過翻轉第一...
    程式設計 發佈於2024-11-08
  • 如何使用 document.querySelectorAll 正確循環選定的元素?
    如何使用 document.querySelectorAll 正確循環選定的元素?
    使用 document.querySelectorAll 循環選定的元素在 Web 開發中,循環選定的元素通常是必要的。 document.querySelectorAll 提供了一個表示所選元素的類似陣列的物件。但是,如果直接在 NodeList 上執行迭代,可能會出現問題,導致輸出中出現其他項目...
    程式設計 發佈於2024-11-08
  • 變數和資料夾的命名規則是什麼?
    變數和資料夾的命名規則是什麼?
    การตั้งชื่อสำหรับตัวแปรและโฟลเดอร์ในโปรเจกต์มีความสำคัญมากในการรักษาความอ่านง่ายและความเป็นระเบียบของโค้ด ต่อไปนี้คือลักษณะและกฎทั่วไปในการตั้งชื่อ: ...
    程式設計 發佈於2024-11-08
  • 使用 Python 建立測驗應用程式:逐步指南
    使用 Python 建立測驗應用程式:逐步指南
    您是否曾想创建自己的测验应用程序?这是一个有趣的项目,可以帮助您学习编程,同时也可以创造一些有用的东西。在此项目中,我们将逐步介绍如何构建一个包含多项选择题、评分、时间限制和不同主题的简单测验应用程序。 我们的测验应用程序会做什么 我们的测验应用程序将: 提出多项选择题 记录分数 ...
    程式設計 發佈於2024-11-08
  • 如何跨多個瀏覽器執行WebUI功能文件
    如何跨多個瀏覽器執行WebUI功能文件
    跨多個瀏覽器執行WebUI 功能文件平行測試和分散式測試技術提供了跨各種瀏覽器執行WebUI 功能文件的能力。在本文中,我們將探討如何在 Karate 和 Zalenium 中使用這些方法。 使用 Parallel RunnerKarate 中的平行運行器允許您執行並行的範例表。若要利用此功能針對多...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3