LeetCode_22_中等_括號生成

文章目錄

  • 1. 題目
  • 2. 思路及代碼實現(Python)
    • 2.1 暴力法
    • 2.2 回溯法


1. 題目

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

示例 1:

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

示例 2:

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


提示

  • 1 ≤ n ≤ 8 1 \leq n \leq 8 1n8

2. 思路及代碼實現(Python)

2.1 暴力法

該思路先生成所有的 2 2 n 2^{2n} 22n 個 “(” 和 “)” 字符串構成的序列,然后檢查生成的序列是否有效,一共有 n n n 對括號,共 2 n 2n 2n 個字符,每個位置存在兩種不同的選擇,因此總共有 2 2 n 2^{2n} 22n 種序列。

為了生成所有序列,可以使用遞歸。長度為 n n n 的序列就是在長度為 n ? 1 n?1 n?1 的序列后加一個 “(” 或 “)”。為了檢查序列是否有效,我們遍歷這個序列,并使用一個變量 b a l bal bal 表示左括號的數量減去右括號的數量。如果在遍歷過程中 b a l bal bal 的值小于零,或者結束時 b a l bal bal 的值不為零,那么該序列就是無效的,否則它是有效的。前者說明,遍歷一段字符串時出現 “)” 大于 “(” 的數量,顯然說明該子串不能成對;而后者說明整個字符串的左右括號數并不相等。

該算法的時間復雜度為: O ( 2 2 n n ) O(2^{2n}n) O(22nn),對于 2 2 n 2^{2n} 22n 個序列中的每一個,對其進行有效性的驗證的復雜度為 O ( n ) O(n) O(n)。而空間復雜度除了存儲答案組之外,還需要存儲探索答案的棧深,復雜度為 O ( n ) O(n) O(n)

class Solution:def generateParenthesis(self, n: int):def generate(A):if len(A) == 2*n:if valid(A):ans.append("".join(A))else:A.append('(')generate(A)A.pop()A.append(')')generate(A)A.pop()def valid(A):bal = 0for c in A:if c == '(': bal += 1else: bal -= 1if bal < 0: return Falsereturn bal == 0ans = []generate([])return ans

執行用時:71 ms
消耗內存:16.54 MB

2.2 回溯法

上述方法是遍歷生成所有的可能的序列,然后再進行判斷,這里我們發現有可以改進的地方,就是在生成序列時,提前跟蹤序列的左右括號的數據,來決定擴展序列時所選擇的括號。例如,已有子序列的左括號數量不大于 n n n,則可以放置左括號,如果右括號數量小于左括號數量,可以放置一個右括號。

該算法的復雜度分析依賴于該有效序列可以回溯出 的元素個數。這證明是第 n n n 個卡特蘭數 1 n + 1 ( 2 n n ) \dfrac{1}{n+1}\dbinom{2n}{n} n+11?(n2n?) ,這是由 4 n n n \dfrac{4^n}{n\sqrt{n}} nn ?4n? 漸近界定的。因此時間復雜度為 O ( 4 n n ) O(\dfrac{4^n}{\sqrt{n}}) O(n ?4n?)。空間復雜度為保存答案和保存棧深的消耗,為 O ( n ) O(n) O(n)

class Solution:def generateParenthesis(self, n: int):ans = []def backtrack(S, left, right):if len(S) == 2 * n:ans.append(''.join(S))returnif left < n:S.append('(')backtrack(S, left+1, right)S.pop()if right < left:S.append(')')backtrack(S, left, right+1)S.pop()backtrack([], 0, 0)return ans

執行用時:42 ms
消耗內存:16.55 MB


題解來源:力扣官方題解

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

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

相關文章

Ai-WB2-32S在window下使用vs 和 msys2編譯以及燒錄

文章目錄 前言一、使用前準備第一步 安裝vscode第二步 安裝msys2 二、使用步驟1.打開MSYS2 MINGW64&#xff08;1&#xff09;在開始欄中找到MSYS2 MINGW64并打開&#xff08;2&#xff09;安裝git&#xff08;3&#xff09;安裝make&#xff08;4&#xff09;安裝好之后的文件…

前端面試練習24.3.1

一.進程和線程的區別 進程&#xff1a;是程序的一次執行過程,擁有獨立的內存空間 線程&#xff1a;是進程中的一個執行單元,共享所屬進程的內存空間和系統資源 進程&#xff08;Process&#xff09;和線程&#xff08;Thread&#xff09;是操作系統中的重要概念&#xff0c;它…

Redis 之五:Redis 的主從復制

概念 主從復制&#xff0c;是指將一臺 Redis 服務器的數據&#xff0c;復制到其他的Redis服務器。前者稱為主節點(master)&#xff0c;后者稱為從節點(slave)&#xff1b;數據的復制是單向的&#xff0c;只能由主節點到從節點。 默認情況下&#xff0c;每臺Redis服務器都是主節…

【0272】postgres內核分配 MyBackendId 實現原理(MyBackendId、MyProc、shmInvalBuffer)(三)

相關文章: 【0255】揭曉pg內核中MyBackendId的分配機制(后端進程Id,BackendId)(一) 【0256】揭曉pg內核中MyBackendId的分配機制(后端進程Id,BackendId)(二) 第一個backend process前,shmInvalBuffer的值情況 (gdb) p *shmInvalBuffer $153 = {minMsgNum =

webpack-cli

webpack-cli做了什么 webpack-cli 是 Webpack 提供的命令行工具&#xff0c;用于在命令行中執行 Webpack 相關的操作。webpack-cli 主要完成以下幾項工作&#xff1a; 解析和處理命令行參數&#xff1a;webpack-cli 負責解析用戶在命令行中輸入的參數&#xff0c;包括配置文件…

云天勵飛戰略投資神州云海,布局機器人市場

日前,AI上市企業云天勵飛(688343.SH)完成了對深圳市神州云海智能科技有限公司(以下簡稱“神州云海”)的B輪戰略投資。 公開資料顯示,自2015年于深圳創立以來,神州云海始終聚焦人工智能與服務機器人廣闊的應用市場,依托自主的核心算法能力,深耕機器人硬件本體研發,整合上下游產…

Java學習筆記001——入門基礎知識

Java語言是一種高級編程語言&#xff0c;它采用了面向對象編程的思想&#xff0c;具有跨平臺性和安全性等優點。現如今&#xff0c;Java語言成為了世界上最流行的編程語言之一。 前一段學習Python語言&#xff0c;本文是學習java的第一篇筆記。 1. java運行環境搭建&#xff…

RabbitMQ-TTL/死信隊列/延遲隊列高級特性

文章目錄 TTL死信隊列消息成為死信的三種情況隊列如何綁定死信交換機 延遲隊列RabbitMQ如何實現延遲隊列 總結來源B站黑馬程序員 TTL TTLTTL(Time To Live):存活時間/過期時間當信息到達存活時間后&#xff0c;還沒有被消費&#xff0c;會被自動清除。RabbitMQ可以對消息設置過…

Win10系統如何重置系統

Win10系統如何重置 大家可以使用Win10內建的重設電腦設定&#xff0c;如以下操作&#xff1a; 首先&#xff0c;可以先到桌面左下角的【開始】 選擇【設定】 在【設定】裡找到【更新與安全性】 在左側欄有一項【復原】 在復原的標題下&#xff0c;副標題有一項【重設此電腦】…

【algorithm】算法基礎課---排序算法(附筆記 | 建議收藏)

&#x1f680;write in front&#x1f680; &#x1f4dd;個人主頁&#xff1a;認真寫博客的夏目淺石. &#x1f381;歡迎各位→點贊&#x1f44d; 收藏?? 留言&#x1f4dd; &#x1f4e3;系列專欄&#xff1a;AcWing算法學習筆記 &#x1f4ac;總結&#xff1a;希望你看完…

tvm交叉編譯參考資料整理

環境 ubuntu20.04&#xff0c;ndk交叉編譯部署到adnroid手機 參考&#xff1a; TVM部署神經網絡模型到android端_tvm android-CSDN博客 使用TVM在android中進行Mobilenet SSD部署 - 知乎

深度探析低代碼:助力“數智轉型”賦能中國制造

隨著數字化和智能化技術的飛速發展&#xff0c;我國制造業正面臨著從傳統制造向智能制造的轉型升級。在這個過程中&#xff0c;低代碼技術作為一種創新性的軟件開發模式&#xff0c;逐漸成為助力我國制造業數智轉型的關鍵驅動力。本文將從低代碼技術的原理、應用場景以及在我國…

?The Sandbox的南極之旅|鏈接世界:從南極洲到元宇宙

真正的發現之旅不在于尋找新的景觀&#xff0c;而在于擁有新的眼光。 - 馬塞爾-普魯斯特 在這個數字世界和物理世界日益交織的時代&#xff0c;The Sandbox 的聯合創始人 Arthur Madrid 和 Sebastien Borget 踏上了遠離數字空間的旅程&#xff0c;前往地球上未被開發的寶藏地點…

無用工作、UBI與AI

有些隱晦和黑暗的事實無法陳述&#xff0c;因為任何的系統中“無用”的結局都是被無情的拋棄和淘汰&#xff0c;AI監督下的人類結局更是如此。 什么是無用工作&#xff1f; 無用無效工作通常指的是那些看似忙碌但實際上對社會或個人沒有實質性貢獻的工作。這類工作可能包括以下…

2024環境工程、能源系統與化學材料國際會議(ICEEESCM 2024)

2024環境工程、能源系統與化學材料國際會議&#xff08;ICEEESCM 2024) 一、【會議簡介】 2024環境工程、能源系統與化學材料國際會議&#xff08;ICEEESCM 2024)將于2024年在西安舉行。會議將圍繞環境工程、能源系統與化學材料等議題展開討論&#xff0c;旨在為從事環境工程…

ABB雙語言共享充電寶投資理財源碼/共享充電寶系統源碼/共享充電寶市場分析/五級分銷返利+地圖顯示模式

ABB雙語言共享充電寶投資理財源碼/五級分銷返利地圖顯示模式/vue編譯后前端 測試環境&#xff1a;Linux系統CentOS7.6、寶塔、PHP7.3、MySQL5.6&#xff0c;根目錄public&#xff0c;偽靜態laravel5&#xff0c; 源碼下載&#xff1a;https://download.csdn.net/download/m0_…

人臉高清算法GFPGAN之TensorRT推理

1. 綜述 最近由于做數字人項目&#xff0c;采用的是wav2lip GFPGAN進行人臉面部高清&#xff0c;但GFPGAN模型本身比較大&#xff0c;所以想著使用TensorRT來代替原始的pth推理看看能否提升運行速度&#xff0c;于是便開始了這趟windows1之下進行GFPGAN的trt推理的折騰之旅。…

varFormatter 數據格式化庫 以性能優先的 快速的 內存對象格式轉換

varFormatter 數據格式化 技術 開源技術欄 對象/變量格式化工具庫&#xff0c;其支持將一個對象進行按照 JSON XML HTML 等格式進行轉換&#xff0c;并獲取到結果字符串&#xff01; 目錄 文章目錄 varFormatter 數據格式化 技術目錄介紹獲取方式 使用實例格式化組件的基本使…

圖書推薦||Word文稿之美

讓你的文檔從平凡到出眾&#xff01; 本書內容 《Word文稿之美》是一本全面介紹Word排版技巧和應用的實用指南。從初步認識數字排版到高效利用模板、圖文配置和表格與圖表的排版技巧&#xff0c;再到快速修正錯誤和保護文件&#xff0c;全面系統地講解數字排版的技術和能力&…

靶機滲透之My File Server: 1

Name: My File Server: 1Date release: 21 Feb 2020Author: Akanksha Sachin VermaSeries: My File ServerDownload: https://drive.google.com/uc?id1w0grAomPuFaIohBcUwDiI3QIi4fj4kje&exportdownload 對于vulnhub中的靶機&#xff0c;我們都需先下載鏡像&#xff0c;然…