LeetCode 熱題 100 22. 括號生成

LeetCode 熱題 100 | 22. 括號生成

大家好,今天我們來解決一道經典的算法題——括號生成。這道題在 LeetCode 上被標記為中等難度,要求生成所有可能的并且有效的括號組合。這是一道非常經典的回溯法題目,非常適合用來練習遞歸和回溯的技巧。下面我將詳細講解解題思路,并附上 Python 代碼實現。


問題描述

數字 n 代表生成括號的對數,請你設計一個函數,用于能夠生成所有可能的并且有效的括號組合。

示例 1:

輸入:n = 3
輸出:["((()))", "(()())", "(())()", "()(())", "()()()"]

示例 2:

輸入:n = 1
輸出:["()"]

提示:

  • 1 <= n <= 8

解題思路

核心思想
  1. 回溯法

    • 回溯法是一種通過遞歸枚舉所有可能解的方法。
    • 在生成括號組合的過程中,我們需要確保每個生成的括號組合都是有效的。
  2. 有效括號的條件

    • 在生成過程中,左括號的數量不能超過 n
    • 在生成過程中,右括號的數量不能超過左括號的數量。
    • 當左括號和右括號的數量都達到 n 時,生成的括號組合是有效的。
  3. 遞歸終止條件

    • 當左括號和右括號的數量都達到 n 時,將當前生成的括號組合加入結果列表。
  4. 遞歸過程

    • 如果左括號的數量小于 n,可以添加一個左括號。
    • 如果右括號的數量小于左括號的數量,可以添加一個右括號。
    • 在遞歸返回時,移除最后一個括號(回溯)。

Python代碼實現

class Solution:def generateParenthesis(self, n):""":type n: int:rtype: List[str]"""result = []def backtracking(left, right, path):# 遞歸終止條件if left == n and right == n:result.append(path)return# 添加左括號if left < n:backtracking(left + 1, right, path + "(")# 添加右括號if right < left:backtracking(left, right + 1, path + ")")backtracking(0, 0, "")return result

代碼解析

  1. 回溯函數 backtracking

    • 參數:
      • left:當前左括號的數量。
      • right:當前右括號的數量。
      • path:當前生成的括號組合。
    • 遞歸終止條件:當左括號和右括號的數量都達到 n 時,將當前生成的括號組合加入結果列表 result
    • 添加左括號:如果左括號的數量小于 n,可以添加一個左括號。
    • 添加右括號:如果右括號的數量小于左括號的數量,可以添加一個右括號。
  2. 結果列表 result

    • 用于存儲所有生成的有效括號組合。
  3. 路徑字符串 path

    • 用于存儲當前遞歸過程中正在構建的括號組合。

復雜度分析

  • 時間復雜度:O(2^(2n) / sqrt(n)),生成所有可能的括號組合的數量是卡特蘭數。
  • 空間復雜度:O(n),遞歸調用棧的深度為 n,同時需要存儲當前路徑 path

示例運行

示例 1
輸入:n = 3
輸出:["((()))", "(()())", "(())()", "()(())", "()()()"]
示例 2
輸入:n = 1
輸出:["()"]

總結

通過回溯法,我們可以高效地生成所有可能的并且有效的括號組合。這種方法利用遞歸枚舉所有可能的括號組合,并通過回溯避免無效的組合。希望這篇題解對大家有所幫助,如果有任何問題,歡迎在評論區留言討論!

關注我,獲取更多算法題解和編程技巧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81967.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TestStand API 簡介

TestStand API 簡介 在自動化測試領域&#xff0c;TestStand 憑借其靈活的架構和強大的功能&#xff0c;成為眾多開發者的首選工具。而 TestStand API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;則是打開 TestStand 強大功能的 “…

如何修改 JAR 包中的源碼

如何修改 JAR 包中的源碼 前言一、準備工作二、將 JAR 當作 ZIP 打開并提取三、重寫 Java 類方法 A&#xff1a;直接替換已編譯的 .class方法 B&#xff1a;運行時類路徑優先加載 四、修改 MyBatis&#xff08;或其他&#xff09;XML 資源五、重新打包 JAR&#xff08;命令行&a…

存算一體架構下的新型AI加速范式:從Samsung HBM-PIM看近內存計算趨勢

引言&#xff1a;突破"內存墻"的物理革命 馮諾依曼架構的"存儲-計算分離"設計正面臨根本性挑戰——在GPT-4等萬億參數模型中&#xff0c;數據搬運能耗已達計算本身的200倍。存算一體&#xff08;Processing-In-Memory, PIM&#xff09;技術通過?在存儲介…

藍橋杯15屆國賽 合法密碼

問題描述 小藍正在開發自己的 OJ 網站。他要求網站用戶的密碼必須符合以下條件&#xff1a; 長度大于等于 8 個字符&#xff0c;小于等于 16 個字符。必須包含至少 1 個數字字符和至少 1 個符號字符。 例如 **lanqiao2024!、-*/0601、8((>w<))8** 都是合法的密碼。 而…

Jenkins忘記admin密碼后的恢復步驟

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、pandas是什么&#xff1f;二、使用步驟 1.引入庫2.讀入數據 總結 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 時間較長沒有使用…

C++ - 仿 RabbitMQ 實現消息隊列(1)(環境搭建)

C - 仿 RabbitMQ 實現消息隊列&#xff08;1&#xff09;&#xff08;環境搭建&#xff09; 什么是消息隊列核心特點核心組件工作原理常見消息隊列實現應用場景優缺點 項目配置開發環境技術選型 更換軟件源安裝一些工具安裝epel 軟件源安裝 lrzsz 傳輸工具安裝git安裝 cmake安裝…

簡單面試提問

Nosql非關系型數據庫&#xff1a; Mongodb&#xff1a;開源、json形式儲存、c編寫 Redis&#xff1a;key-value形式儲存&#xff0c;儲存在內存&#xff0c;c編寫 關系型數據庫&#xff1a; sqlite;&#xff1a;輕量型、0配置、磁盤存儲、支持多種語言 mysql&#xff1a;開源…

油氣地震資料信號處理中的NMO(正常時差校正)

油氣地震資料信號處理中的NMO&#xff08;正常時差校正&#xff09;介紹與應用 NMO基本概念 **正常時差校正&#xff08;Normal Moveout Correction&#xff0c;NMO&#xff09;**是地震資料處理中的一項關鍵技術&#xff0c;主要用于消除由于炮檢距&#xff08;source-recei…

深度解析:從 GPT-4o“諂媚”到 Deepseek“物理腔”,透視大模型行為模式的底層邏輯與挑戰

深度解析&#xff1a;從 GPT-4o“諂媚”到 AI“物理腔”&#xff0c;透視大模型行為模式的底層邏輯與挑戰 標簽&#xff1a;人工智能, GPT-4o, 大語言模型, AI倫理, 人機交互, 技術思考 大家好&#xff01;最近AI圈最火的“瓜”之一&#xff0c;莫過于OpenAI的GPT-4o模型在一…

Java引用RabbitMQ快速入門

這里寫目錄 Java發送消息給MQ消費者接收消息實現一個隊列綁定多個消費者消息推送限制 Fanout交換機路由的作用Direct交換機使用案例 Java發送消息給MQ public void testSendMessage() throws IOException, TimeoutException {// 1.建立連接ConnectionFactory factory new Conn…

從讀寫分離到分布式服務:系統架構演進十階段深度解析

第一階段到第四階段&#xff1a;架構進化四階段&#xff1a;探索單體到集群的高可用性能優化之道-CSDN博客https://blog.csdn.net/pinbodeshaonian/article/details/147464084?spm1001.2014.3001.5502 以下是對從第五階段到第十階段詳細的解釋&#xff1a; 第五階段&#xf…

Webug4.0靶場通關筆記07- 第9關反射XSS和第10關存儲XSS

目錄 第09關 反射型XSS 1.打開靶場 2.源碼分析 3.滲透實戰 第10關 存儲型XSS 1.打開靶場 2.源碼分析 3.滲透實戰 本系列為通過《Webug4.0靶場通關筆記》的滲透集合&#xff0c;本文為反射型和存儲型XSS漏洞關卡的滲透部分&#xff0c;通過對XSS關卡源碼的代碼審計找到漏…

Prometheus的安裝部署

目錄 一、概述 二、Prometheus的安裝 1、二進制方式 1.1、下載系統安裝包?編輯 1.2、解壓 1.3、創建數據目錄&#xff0c;服務運行用戶 1.4、設置為系統服務&#xff08;創建服務運行腳本&#xff09; 1.5、啟動服務&#xff0c;并通過瀏覽器訪問驗證 2、容器方式 2…

Jupyter Notebook為什么適合數據分析?

Jupyter Notebook 是一款超實用的 Web 應用程序&#xff0c;在數據科學、編程等諸多領域都發揮著重要作用。它最大的特點就是能讓大家輕松創建和共享文學化程序文檔。這里說的文學化程序文檔&#xff0c;簡單來講&#xff0c;就是把代碼、解釋說明、數學公式以及數據可視化結果…

Python清空Word段落樣式的方法

在 Python 中&#xff0c;你可以使用 python-docx 庫來操作 Word 文檔&#xff0c;包括清空段落樣式。以下是幾種清空段落樣式的方法&#xff1a; 方法一&#xff1a;直接設置段落樣式為"Normal" from docx import Documentdoc Document(your_document.docx) # 打…

macOS 上是否有類似 WinRAR 的壓縮軟件?

對于習慣使用 Windows 的用戶來說&#xff0c;WinRAR 是經典的壓縮/解壓工具&#xff0c;但 macOS 系統原生并不支持 RAR 格式的解壓&#xff0c;更無法直接使用 WinRAR。不過&#xff0c;macOS 平臺上有許多功能相似甚至更強大的替代工具&#xff0c;以下是一些推薦&#xff1…

WebRtc09:網絡基礎P2P/STUN/TURN/ICE

網絡傳輸基本知識 NATSTUN&#xff08;Session Traversal Utilities for NAT&#xff09;TURNICE NAT 產生的原因 IPV4地址不夠出于網絡安全的原因 NAT種類 完全錐型NAT(Full Cone NAT)地址限制型NAT(Address Restricted Cone NAT)端口限制型NAT(Port Restricted Cone NAT…

如何添加或刪除極狐GitLab 項目成員?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 項目成員 (BASIC ALL) 成員是有權訪問您的項目的用戶和群組。 每個成員都有一個角色&#xff0c;這決定了他們在項目中可以…

用單目相機和apriltag二維碼aruco實現單目定位

目錄 一、核心流程與代碼框架 1. ?環境準備? 2. ?ArUco定位實現 3. ?AprilTag定位實現&#xff08;需額外安裝Apriltag庫&#xff09; 二、關鍵優化點 1?.亞像素角點優化 2? 多標簽聯合定位 三、性能指標&#xff08;實測&#xff09; 四、常見問題 ?檢測失敗…

tinyrenderer筆記(透視矯正)

tinyrenderer個人代碼倉庫&#xff1a;tinyrenderer個人練習代碼 引言 還要從上一節知識說起&#xff0c;在上一節中我為了調試代碼&#xff0c;換了一個很簡單的正方形 obj 模型&#xff0c;配上紋理貼圖與法線貼圖進行渲染&#xff0c;得了下面的結果&#xff1a; what&…