【中等】題解力扣22:括號生成

題目詳情

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

示例 1:
輸入:n = 3
輸出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]

示例 2:
輸入:n = 1
輸出:[“()”]

提示:

  • 1 <= n <= 8

解題思路

使用回溯法(深度優先搜索) 生成所有有效括號組合,核心思路如下:

  1. 有效括號條件
  • 左括號數量不能超過 n
  • 右括號數量不能超過左括號(確保有效性)。
  1. 遞歸終止條件:當前字符串長度達到 2n 時,將結果加入列表。
  2. 遞歸過程
  • 若左括號數量 < n,添加左括號并遞歸。
  • 若右括號數量 < 左括號數量,添加右括號并遞歸。
  1. 回溯:每次遞歸后刪除最后一個字符,嘗試其他組合。
  2. 優化:使用 StringBuilder 避免字符串拼接開銷,減少內存消耗。

代碼實現(Java版)

import java.util.ArrayList;
import java.util.List;class Solution {public List<String> generateParenthesis(int n) {List<String> result = new ArrayList<>();backtrack(result, new StringBuilder(), 0, 0, n);return result;}private void backtrack(List<String> result, StringBuilder current, int left, int right, int n) {if (current.length() == 2 * n) {result.add(current.toString());return;}if (left < n) {current.append('(');backtrack(result, current, left + 1, right, n);current.deleteCharAt(current.length() - 1); // 回溯}if (right < left) {current.append(')');backtrack(result, current, left, right + 1, n);current.deleteCharAt(current.length() - 1); // 回溯}}
}

代碼說明

  1. 初始化
  • result 存儲最終結果,StringBuilder current 動態構建當前組合。
  1. 回溯函數
  • 參數left(已用左括號數)、right(已用右括號數)、n(總對數)。
  • 終止條件current.length() == 2 * n 時保存有效組合。
  • 左括號分支:當 left < n 時,添加 ( 并遞歸。
  • 右括號分支:當 right < left 時,添加 ) 并遞歸。
  • 回溯操作:遞歸返回后刪除末尾字符,恢復狀態嘗試其他分支。
  1. 效率關鍵
  • 通過條件剪枝避免無效組合。
  • StringBuilder 減少字符串操作開銷。

提交詳情(執行用時、內存消耗)

在這里插入圖片描述

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

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

相關文章

【JEECG 組件擴展】JSwitch開關組件擴展單個多選框樣式

功能說明&#xff1a;基于JeecgBoot開源框架&#xff0c;JSwitch開關組件擴展&#xff0c;支持單個多選樣式。效果展示&#xff1a;使用示例&#xff1a;{field: JSwitch,component: JSwitch,label: JSwitch,},{field: JSwitchCheckBox,component: JSwitch,label: JSwitchCheck…

(轉)Kubernetes基礎介紹

Kubernetes是用于自動部署、擴展和管理容器化應用程序的開源系統。

vue 播放海康m3u8視頻流筆記

1、安裝hls.jsnpm i hls 2、使用<el-dialogtitle"監控"top"5vh":visible.sync"dialogVisible"width"30%"><video id"video" style"width:100%;height:300px" controls><sourcetype"applicati…

如何清除 npm 緩存

清除 npm 緩存&#xff1a;利弊分析與操作指南 在使用 Node.js 和 npm 進行項目開發時&#xff0c;我們經常會與 npm install 命令打交道。這個過程中&#xff0c;npm 會在本地建立一個緩存機制&#xff0c;用以存儲已下載的包&#xff0c;從而顯著提升后續安裝的速度。然而&am…

Java學習-----消息隊列

消息隊列是分布式系統中重要的組件之一。使用消息隊列主要是為了通過異步處理提高系統性能和削峰、降低系統耦合性。使用消息隊列主要有三點好處&#xff1a;&#xff08;1&#xff09;通過異步處理提高系統性能&#xff08;減少響應所需時間&#xff09;&#xff1a;用戶提交請…

玩轉Docker | 使用Docker部署TeamMapper思維導圖應用程序

玩轉Docker | 使用Docker部署TeamMapper思維導圖應用程序 前言 一、TeamMapper介紹 TeamMapper簡介 TeamMapper功能 二、系統要求 環境要求 環境檢查 Docker版本檢查 檢查操作系統版本 三、部署TeamMapper服務 下載TeamMapper鏡像 編輯部署文件 創建容器 檢查容器狀態 檢查服務…

深入解析Linux進程創建與fork機制

目錄 一、fork函數初識 二、fork函數返回值 思考&#xff1a; 1. fork函數為何給子進程返回0&#xff0c;而給父進程返回子進程的PID&#xff1f; 2. 關于fork函數為何有兩個返回值這個問題 三、寫時復制機制 寫時拷貝&#xff08;Copy-On-Write&#xff09;機制解析 1.…

【軟件開發】主流 AI 編碼插件

主流 AI 編碼插件1. GitHub Copilot 支持平臺&#xff1a;VS Code、Neovim、JetBrains 系列、Visual Studio 優點 深度語料庫&#xff1a;基于 OpenAI 的大規模模型訓練&#xff0c;能夠生成高質量、上下文相關的代碼補全。多語言支持&#xff1a;對 Python、JavaScript、TypeS…

實訓十一——網絡通信原理

補充如何解決IPv4地址不足的問題&#xff1f;使用專用的IPv4地址范圍&#xff08;如 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16&#xff09;并通過NAT轉換與外部網絡通信&#xff0c;能有效節約公網IPv4地址。根據RFC 1918的定義&#xff0c;以下是保留的私有IPv4地址范圍&am…

Spring Cloud LoadBalancer 詳解

在分布式系統快速發展的當下&#xff0c;服務間的調用日益頻繁且復雜。如何合理分配請求流量&#xff0c;避免單個服務節點過載&#xff0c;保障系統的穩定性與高效性&#xff0c;成為關鍵問題。負載均衡技術便是解決這一問題的重要手段。Spring Cloud LoadBalancer 作為 Sprin…

Linux內核內存管理相關的配置參數

Linux內核內存管理相關的配置參數&#xff08;主要位于/proc/sys/vm/目錄下&#xff09;&#xff0c;用于調整內存分配、緩存管理、交換機制、OOM&#xff08;內存溢出&#xff09;策略等核心內存行為。以下是對每個參數的詳細解釋&#xff1a; admin_reserve_kbytes block_dum…

Web開發 01

先放一下自己寫的手敲的第一個網站代碼&#xff01;~雖然很簡單但還是有點成就感&#xff01;&#xff01;開心&#x1f60a;<!DOCTYPE html> <html><head><title>Title!</title><link rel "stylesheet"href "style.css"…

Redis 生產實戰 7×24:容量規劃、性能調優、故障演練與成本治理 40 條軍規

&#xff08;一&#xff09;寫在前面&#xff1a;為什么需要“軍規” Redis 在測試環境跑得飛快&#xff0c;一到線上就“莫名其妙”抖動&#xff1b;大促前擴容 3 倍&#xff0c;成本卻翻 5 倍&#xff1b;一次主從切換&#xff0c;緩存雪崩導致下游 DB 被打掛&#xff1b;開發…

【DOCKER】綜合項目 MonitorHub (監控中心)

文章目錄1、項目架構圖1.1 架構組件2、實際實施2.1 安裝docker2.2 編寫dockerfile文件2.2.1 Prometheus2.2.2 node_exporter2.2.3 nginxvts模塊2.2.4 nginx_exporeter 服務發現文件2.2.5 maridb dockerfile文件2.2.6 鏡像總數2.3 具體操作2.3.1 Prometheus組件2.3.2 nginx組件2…

Java List 集合詳解:從基礎到實戰,掌握 Java 列表操作全貌

作為一名 Java 開發工程師&#xff0c;你一定在項目中頻繁使用過 List 集合。它是 Java 集合框架中最常用、最靈活的數據結構之一。無論是從數據庫查詢出的數據&#xff0c;還是前端傳遞的參數列表&#xff0c;List 都是處理這些數據的首選結構。本文將帶你全面掌握&#xff1a…

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言!

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言算法近幾年剛提出&#xff0c;知網還沒幾個人用&#xff0c;你先用&#xff0c;你就是創新&#xff01;算法新穎小眾&#xff0c;用的人很少&#xff0c;包含分解圖、頻譜圖、相關系數圖&#xff0c;效果如…

Oracle數據泵詳解——讓數據遷移像“點外賣”一樣簡單?

?今天我想和大家聊一個數據庫領域的“萬能搬運工”——Oracle數據泵&#xff08;Data Pump&#xff09;?。相信很多人都有過這樣的經歷&#xff1a;業務要上線新系統&#xff0c;得把舊庫的數據搬到新環境&#xff1b;或者領導突然要一份3年前的歷史數據&#xff0c;可不能影…

Leetcode 03 java

爬樓梯算法現在只看明白動態規劃&#xff0c;也沒有很難喲&#xff01;&#xff01;題目70. 爬樓梯假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f;java題解class Solution {public int climbStairs(…

怎么刪除 wps 的右鍵菜單

打開 WPS 點擊 WPS Office 選項卡&#xff0c;點擊右側全局配置》配置和修復工具點擊高級功能定制下的都可以關閉和隱藏點擊確定就可以了。

C++:list

一&#xff0c;list的介紹1&#xff0c;list初步&#xff08;1&#xff09;list是 C 標準模板庫 (STL) 中的一個雙向鏈表容器。它允許在常數時間內進行任意位置的插入和刪除操作&#xff0c;但不支持隨機訪問。&#xff08;2&#xff09;list容器的底層數據結構為帶頭雙向循環鏈…