【力扣22】括號生成

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

源代碼:

class Solution {
public:int n;vector<string> ans;string path;vector<string> generateParenthesis(int n) {this->n = n;dfs(0, 0);return ans;}void dfs(int left, int right) {if (path.size() == 2 * n) {          // 遞歸出口:已湊夠 2n 個字符ans.push_back(path);return;}if (left < n) {                      // 可以加 '('path.push_back('(');dfs(left + 1, right);path.pop_back();                 // 回溯}if (right < left) {                  // 可以加 ')'path.push_back(')');dfs(left, right + 1);path.pop_back();                 // 回溯}}
};

括號的兩種關系:排列,嵌套;
討論第一個括號:
排列:()…
嵌套:(…)
每種情況進行dfs遞歸;

path設置為string類型,排列的情況只需path = () + path;
嵌套的情況:path = ( + path + );SB
? 嵌套的情況應該是在剩余部分最外側嵌套,這種寫法會導致下次遞歸會在嵌套外側修改。

設置前front,待定path,后back三段;
排列的情況:front = front+();
嵌套的情況:front = front+(; back = )+back;

這樣只能做到在最前面排列單括號,整體嵌套,整體嵌套中最前面排列單括號,在嵌套中排列單括號;
無法再最后面排列單括號,無法在嵌套括號中排列單括號;

希望隨時能直接加()或嵌套;
如果使用了嵌套,則需要在嵌套前,嵌套中,嵌套后的位置同理;
a.嵌套前:
排列:+(); 嵌套:在現在的位置后面+(,在最后+);
b.嵌套中:(前面是本次嵌套的(,后面是本次嵌套的));
排列:+(); 嵌套:在現在的位置后面+(,本次嵌套的)前面+);
c.嵌套后:(前面是上次嵌套的))
排列:+(); 嵌套:在現在的位置后面+(,在最后+);

過于復雜了,這個方法不好。
下面AI給出的實現也報錯了:

class Solution {
public:vector<string> generateParenthesis(int n) {vector<string> ans;dfs("", "", n, n, ans);   // prefix, pending, left, rightreturn ans;}private:// 任何時刻真實串 = prefix + pending + 尚未展開的位置void dfs(string prefix, string pending,int left,           // 還能再放幾個 '('int right,          // 還能再放幾個 ')'vector<string>& ans){// 1. 終止條件:左右括號全都用完if (left == 0 && right == 0) {ans.push_back(prefix + pending);   // pending 此時為空return;}// 2. 在當前“可插入點”直接并列一對 ()//    等價于:prefix + pending + "()"//    注意 left、right 各減 1if (left >= 1 && right >= 1) {dfs(prefix + pending + "()", "", left - 1, right - 1, ans);}// 3. 新開一層嵌套:放一個 '(',并把對應的 ')' 壓入 pendingif (left > 0) {dfs(prefix + pending + "(", ")" + pending, left - 1, right, ans);// 注意 pending 被整體右移,相當于把新 ')' 放在本次嵌套的末尾}// 4. 如果還有未匹配的左括號,就把 pending 第一個 ')' 真正落盤if (!pending.empty()) {dfs(prefix + pending[0], pending.substr(1), left, right, ans);// 這里 pending[0] 一定是 ')'}}
};

怎么回退?不回退的話每次遞歸調用都要定義兩個新string。
在這里插入圖片描述
我是真討厭string。

string類型的數據常用索引處理,而不直接處理字符串本身。
或者直接將選擇過的遍歷作為參數傳遞給遞歸函數:
在這里插入圖片描述
但是會返回完全一樣的兩組結果,即重復計算了一次。

n=1
排列: front=(); back=nullptr;
嵌套: front=(; back = );

用無序集去重,再轉換成vector:
在這里插入圖片描述
思路有問題。
無法構造 (())() ;
待定吧,今天懶得想了,再想怕失眠。
無法在最后加()的問題想不到解決的思路。

換思路:感謝靈神
https://leetcode.cn/problems/generate-parentheses/solutions/2071015/hui-su-bu-hui-xie-tao-lu-zai-ci-pythonja-wcdw/?envType=study-plan-v2&envId=top-interview-150

重要條件:當且僅當左括號數量大于右括號數量時,才能加右括號;
有了這個之后直接選與不選 子集法;

在這里插入圖片描述

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

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

相關文章

ELK分布式日志采集系統

* 系統架構&#xff1a;filebeat 采集各服務器日志&#xff1b;Logstash-docker 過濾整理日志&#xff1b; Elasticsearch-docker 存儲和索引數據&#xff1b; Kibana-docker 提供可視化展示和操作。* FileBeat簡介&#xff1a;Filebeat是本地文件的日志數據采集器。* Kafka簡介…

Python生產環境部署指南:專業級應用啟動方案

在生產環境中部署Python應用需要考慮穩定性、性能和安全性。本文將詳細介紹多種專業部署方案,助你構建可靠的生產環境。 一、核心部署架構 標準Python生產環境包含三個核心組件: 應用服務器:運行Python代碼(Gunicorn/uWSGI/Uvicorn) 進程管理器:保障服務持續運行(Supe…

C語言:結構體、共用體與枚舉詳解

在 C 語言編程中&#xff0c;結構體&#xff08;struct&#xff09;、共用體&#xff08;union&#xff09;與枚舉&#xff08;enum&#xff09;是三種非常重要的用戶自定義數據類型。它們能幫助我們更好地組織、管理和表達復雜的數據結構。本文將結合實例&#xff0c;深入介紹…

Linux Web服務器與WordPress部署筆記

web服務器 nginx 配置基本認證 用戶名和密碼使用plain text發送&#xff0c;所以最好配置SSL/TLS。 # 安裝工具[rootserver ~ 09:21:43]# yum -y install httpd-tools[rootserver ~ 09:28:30]# vim /etc/nginx/conf.d/ssl.confserver {?location /auth-basic/ {auth_basic …

貪心----3. 跳躍游戲 II

45. 跳躍游戲 II - 力扣&#xff08;LeetCode&#xff09; /** 維護變量: max_reachable,遍歷過的元素的最遠可達位置 end,當前區間終點(隨max_reachable變化) 遍歷過程: 遍歷時迭代遍歷過的元素最遠可達位置,利用end記錄當前區間終點(隨max_reachable變化) 當移動至end即當前…

RabbitMQ面試精講 Day 13:HAProxy與負載均衡配置

【RabbitMQ面試精講 Day 13】HAProxy與負載均衡配置 開篇 歡迎來到"RabbitMQ面試精講"系列的第13天&#xff01;今天我們將聚焦RabbitMQ集群架構中的關鍵組件——HAProxy及其負載均衡配置。在大型分布式系統中&#xff0c;如何實現RabbitMQ集群的高可用和負載均衡是…

C# 中常用集合以及使用場景

1. 數組 (Array)??特點?&#xff1a;固定大小、內存連續、訪問速度快?使用場景?&#xff1a;需要高性能的固定大小集合數值計算&#xff08;如矩陣運算&#xff09;存儲已知長度的數據&#xff08;如配置文件參數&#xff09;?2. List<T>??特點?&#xff1a;動態…

量化實戰學習 Day 2:雙均線策略實現與回測分析

一、前言在完成第一天的環境搭建和基礎認知后&#xff0c;今天將進入真正的策略開發環節。本文將記錄我從數據處理到第一個量化策略實現的全過程&#xff0c;包含完整的代碼示例和深度思考。二、復習與環境檢查1.1 環境復查首先確認了Day 1搭建的環境運行正常&#xff1a; cond…

ubuntu 安裝內核模塊驅動 DKMS 介紹

DKMS&#xff08;Dynamic Kernel Module Support&#xff0c;動態內核模塊支持&#xff09;是一個用于管理 Linux 內核模塊的工具&#xff0c;主要作用是在系統內核更新時&#xff0c;自動重新編譯和安裝依賴于特定內核版本的驅動程序&#xff08;內核模塊&#xff09;&#xf…

adb使用指南

adb使用指南一、介紹二、連接一、有線連接方式二、無線連接方式**Android 10及以下版本****Android 11及以上版本**三、指令1、設備連接管理2、應用調試3、文件傳輸4、系統控制6、日志分析7、其他速查表總結python腳本實例&#xff1a;提示&#xff1a;以下是本篇文章正文內容&…

C語言實戰:二級指針與文件操作的完美邂逅——動態管理文件數據

資料合集下載鏈接: ?https://pan.quark.cn/s/472bbdfcd014? 在上一篇文章中,我們探討了二級指針作為函數“輸出特性”的強大功能。今天,我們將更進一步,通過一個完整的實戰項目,將二級指針與文件I/O操作結合起來,學習如何動態、高效地讀取和管理文件內容。 這個項目…

低代碼開發實戰案例,如何通過表單配置實現數據輸入、數據存儲和數據展示?

JVS低代碼輕應用快速開發采用所見即所得的配置思路&#xff0c;表單是低代碼中最基礎的業務配置引擎之一&#xff0c;快速的通過表單配置實現數據輸入、數據存儲&#xff0c;數據展示。那么在輕應用下直接點開菜單打開的表單&#xff0c;錄入數據提交到數據模型&#xff0c;后續…

數字孿生系統讓汽車工廠虛實聯動預測維護少停機

在汽車制造行業&#xff0c;設備突發停機往往會引發連鎖反應&#xff0c;導致生產中斷、成本飆升。傳統運維模式依賴人工巡檢與事后維修&#xff0c;難以應對復雜生產場景下的設備管理需求。如今&#xff0c;數字孿生系統憑借虛實聯動的核心能力&#xff0c;為汽車工廠打造預測…

iceberg1.2.0 修改表與覆蓋寫

版本iceberg 1.2.0修改表只支持HiveCatalog表修改表屬性&#xff0c;Iceberg表屬性和Hive表屬性存儲在HMS中是同步的修改外部表刪表時是否刪除數據的表屬性&#xff0c;這里是修改為刪除表時不刪除數據alter table iceberg_test1 set TBLPROPERTIES(external.table.purgeFALSE)…

Mini-Omni: Language Models Can Hear, Talk While Thinking in Streaming

2024.8tsinghuamethodwhisper encoder: whisper smallLLM Qwen0.5b init預測方式&#xff1a;text 7*audio token&#xff0c; parallel generation的方式預測&#xff0c;delay-step1----先預測文本token&#xff0c;再預測SNAC 第一級碼本&#xff0c;然后序列化的逐漸預測后…

【MATLAB例程】基于UKF的IMM例程,模型使用CA(勻加速)和CT(協調轉彎)雙模型,二維環境下的軌跡定位。附代碼下載鏈接

本文介紹的MATLAB程序可以實現&#xff1a;基于交互式多模型&#xff08;IMM&#xff09;的無跡卡爾曼濾波&#xff08;UKF&#xff09;方法&#xff0c;用于二維平面中目標的運動狀態估計。該算法結合了兩個運動模型&#xff1a;勻速直線模型&#xff08;CV&#xff09;和勻速…

工廠智慧設備檢測:多模態算法提升工業安全閾值

工廠智慧設備檢測&#xff1a;從技術突破到場景化落地在工業4.0與智能制造的雙重驅動下&#xff0c;工廠設備檢測正經歷從人工巡檢到智能化監控的顛覆性變革。傳統檢測方式受限于人力成本、環境干擾及響應延遲&#xff0c;難以滿足現代工廠對安全性、效率與可持續性的要求。而基…

復現論文《地形遮擋對GNSS干擾范圍影響的高效仿真算法》

地形遮擋對GNSS干擾范圍影響的高效仿真算法 1. 論文標題 論文標題為《地形遮擋對GNSS干擾范圍影響的高效仿真算法》 2. 內容概括 該論文提出了一種高效計算地形遮擋對全球導航衛星系統(GNSS)干擾源干擾范圍影響的新算法。傳統基于視線可視域分析的方法存在大量冗余計算,本…

圖論(2)算法之拓撲排序介紹

目錄 一、什么是拓撲排序&#xff1f; 二、拓撲排序的算法實現 1 BFS算法實現 &#xff08;1&#xff09;算法思路 &#xff08;2&#xff09; 代碼實現&#xff08;Java&#xff09; 2 DFS算法實現 &#xff08;1&#xff09;算法思路 &#xff08;2&#xff09; 代碼實…

GoBy 工具聯動 | GoBy AWVS 自動化漏掃工作流

GoBy 系統筆記導航 &#x1f680;&#xff1a;[網安工具] Web 漏洞掃描工具 —— GoBy 使用手冊 AWVS 系統筆記導航 &#x1f680;&#xff1a;[網安工具] Web 漏洞掃描工具 —— AWVS 使用手冊 0x01&#xff1a;GoBy AWVS —— 聯動掃描簡介 AWVS 是一款由 Acunetix 公司開…